use crate::*; use EdnItem::*; pub struct EdnKeymap(pub Vec>); impl EdnKeymap { pub fn command , E: EdnCommand, I: EdnInput> (&self, state: &C, input: &I) -> Option { for item in self.0.iter() { if let Exp(items) = item { match items.as_slice() { [Sym(a), b, c @ ..] => if input.matches(a.as_str()) { return Some(E::from_edn(state, &b.to_ref(), c)) }, _ => unreachable!() } } else { unreachable!() } } None } }