1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
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]),
}
}
}