enumkit/
lib.rs

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}