soliterm-model 0.1.0

Shared model types for soliterm
Documentation
use enum_map::{enum_map, EnumArray, EnumMap};

pub trait EnumMapExt<K, V> {
    fn map_ref<'a, F, T>(&'a self, f: F) -> EnumMap<K, T>
    where
        K: EnumArray<T>,
        V: 'a,
        F: FnMut(K, &'a V) -> T;
}

impl<K, V> EnumMapExt<K, V> for EnumMap<K, V>
where
    K: Copy + EnumArray<V>,
{
    fn map_ref<'a, F, T>(&'a self, mut f: F) -> EnumMap<K, T>
    where
        K: EnumArray<T>,
        V: 'a,
        F: FnMut(K, &'a V) -> T,
    {
        enum_map! {
            key => f(key, &self[key]),
        }
    }
}