What #[derive(Index)] generates
Deriving Index
only works for a single field of a struct.
The result is that you will index it’s member directly.
With #[index]
or #[index(ignore)]
it’s possible to indicate the field that
you want to derive Index
for.
1 Example usage
#[derive(Index)] struct MyVec(Vec<i32>); // You can specify the field you want to derive Index for #[derive(Index)] struct Numbers { #[index] numbers: Vec<i32>, useless: bool, } fn main() { assert_eq!(5, MyVec(vec![5, 8])[0]); assert_eq!(200, Numbers{numbers: vec![100, 200], useless: false}[1]); }
2 Structs
When deriving Index
for a struct:
#[derive(Index)] struct Numbers { #[index] numbers: Vec<i32>, useless: bool, }
Code like this will be generated:
impl<__IdxT> ::core::ops::Index<__IdxT> for Numbers where Vec<i32>: ::core::ops::Index<__IdxT>, { type Output = <Vec<i32> as ::core::ops::Index<__IdxT>>::Output; #[inline] fn index(&self, idx: __IdxT) -> &Self::Output { <Vec<i32> as ::core::ops::Index<__IdxT>>::index(&self.numbers, idx) } }
3 Enums
Deriving Index
is not supported for enums.