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