mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 04:06:45 +01:00
27 lines
825 B
Rust
27 lines
825 B
Rust
use crate::*;
|
|
|
|
impl Scene {
|
|
pub fn from_edn <'a, 'e> (args: &[Edn<'e>]) -> Usually<Self> {
|
|
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)
|
|
}
|
|
}
|