Indexing
TicketStore::get
returns an Option<&Ticket>
for a given TicketId
.
We've seen before how to access elements of arrays and vectors using Rust's
indexing syntax:
#![allow(unused)] fn main() { let v = vec![0, 1, 2]; assert_eq!(v[0], 0); }
How can we provide the same experience for TicketStore
?
You guessed right: we need to implement a trait, Index
!
Index
The Index
trait is defined in Rust's standard library:
#![allow(unused)] fn main() { // Slightly simplified pub trait Index<Idx> { type Output; // Required method fn index(&self, index: Idx) -> &Self::Output; } }
It has:
- One generic parameter,
Idx
, to represent the index type - One associated type,
Output
, to represent the type we retrieved using the index
Notice how the index
method doesn't return an Option
. The assumption is that
index
will panic if you try to access an element that's not there, as it happens
for array and vec indexing.
Exercise
The exercise for this section is located in 06_ticket_management/13_index