@@ -10,6 +10,10 @@ impl<T> std::ops::Index<usize> for OpaqueTableColumn<'_, T> {
1010 }
1111}
1212
13+ trait NewTypeMarker : TryInto < usize , Error = crate :: TskitError > { }
14+
15+ impl NewTypeMarker for crate :: EdgeId { }
16+
1317impl < T > std:: ops:: Index < crate :: SizeType > for OpaqueTableColumn < ' _ , T > {
1418 type Output = T ;
1519
@@ -18,10 +22,13 @@ impl<T> std::ops::Index<crate::SizeType> for OpaqueTableColumn<'_, T> {
1822 }
1923}
2024
21- impl < T > std:: ops:: Index < crate :: EdgeId > for OpaqueTableColumn < ' _ , T > {
25+ impl < I , T > std:: ops:: Index < I > for OpaqueTableColumn < ' _ , T >
26+ where
27+ I : NewTypeMarker ,
28+ {
2229 type Output = T ;
23- fn index ( & self , index : crate :: EdgeId ) -> & Self :: Output {
24- & self . 0 [ usize :: try_from ( index) . unwrap ( ) ]
30+ fn index ( & self , index : I ) -> & Self :: Output {
31+ & self . 0 [ index. try_into ( ) . unwrap ( ) ]
2532 }
2633}
2734
@@ -33,8 +40,11 @@ pub trait TableColumn<I, T>:
3340 fn as_slice ( & self ) -> & [ T ] ;
3441}
3542
36- impl TableColumn < crate :: EdgeId , crate :: NodeId > for OpaqueTableColumn < ' _ , crate :: NodeId > {
37- fn as_slice ( & self ) -> & [ crate :: NodeId ] {
43+ impl < I , T > TableColumn < I , T > for OpaqueTableColumn < ' _ , T >
44+ where
45+ I : NewTypeMarker ,
46+ {
47+ fn as_slice ( & self ) -> & [ T ] {
3848 self . 0
3949 }
4050}
0 commit comments