1#[cfg(test)]
2mod test;
3
4pub use enumkit_derive::{EnumValues, EnumMapping};
5
6pub trait EnumValues {
7 type Enum;
8 fn values() -> impl Iterator<Item=Self::Enum>;
9 fn len() -> usize;
10}
11
12pub trait EnumMapping<T> {
13 type Enum;
14 type EnumIter<'a>: Iterator<Item=(Self::Enum, &'a T)>
15 where
16 T: 'a,
17 Self: 'a;
18 fn get(&self, var: Self::Enum) -> &T;
19 fn get_mut(&mut self, var: Self::Enum) -> &mut T;
20 fn put(&mut self, var: Self::Enum, val: T);
21 fn new<F: FnMut(Self::Enum) -> T>(f: F) -> Self;
22 fn iter(&self) -> Self::EnumIter<'_>;
23}