1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/// Every index type to be used with Stash needs to implement this trait
pub trait Index {
    /// Create an index from `usize`.
    ///
    /// This method should panic if `idx` is out of acceptable range.
    fn from_usize(idx: usize) -> Self;

    /// Turn this index into `usize`
    fn into_usize(self) -> usize;
}

// Auto implement this for types equivalent to `usize`.
impl<T> Index for T
where
    T: From<usize> + Into<usize>,
{
    fn from_usize(idx: usize) -> Self {
        From::from(idx)
    }
    fn into_usize(self) -> usize {
        Into::into(self)
    }
}