Files
100-exercises-to-learn-rust/book/src/06_ticket_management/13_index.md
Luca Palmieri 99591a715e Formatter (#51)
Enforce consistent formatting use `dprint`
2024-05-24 17:00:03 +02:00

922 B
Raw Blame History

Indexing

TicketStore::get returns an Option<&Ticket> for a given TicketId.
Weve seen before how to access elements of arrays and vectors using Rusts indexing syntax:

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 Rusts standard library:

// 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 doesnt return an Option. The assumption is that index will panic if you try to access an element thats not there, as it happens for array and vec indexing.