use crate::*; impl Scene { pub fn from_edn <'a, 'e> (args: &[Edn<'e>]) -> Usually { let mut name = None; let mut clips = vec![]; edn!(edn in args { Edn::Map(map) => { let key = map.get(&Edn::Key(":name")); if let Some(Edn::Str(n)) = key { name = Some(*n); } else { panic!("unexpected key in scene '{name:?}': {key:?}") } }, Edn::Symbol("_") => { clips.push(None); }, Edn::Int(i) => { clips.push(Some(*i as usize)); }, _ => panic!("unexpected in scene '{name:?}': {edn:?}") }); let scene = Self::new(name.unwrap_or(""), clips); Ok(scene) } }