diff options
| author | troido <troido@protonmail.com> | 2020-02-21 19:45:50 +0100 |
|---|---|---|
| committer | troido <troido@protonmail.com> | 2020-02-21 19:45:50 +0100 |
| commit | 8169718d7e0b189acdf69c14ee817d2c6aa684e1 (patch) | |
| tree | 7c73442391e320793a8dcc9ba6b8ea5a4ade5318 /src | |
| parent | 1f85c11d0ebb0a879b7825b8e78e473a77d8b778 (diff) | |
remove forgoten file 'load.rs'
Diffstat (limited to 'src')
| -rw-r--r-- | src/load.rs | 69 |
1 files changed, 0 insertions, 69 deletions
diff --git a/src/load.rs b/src/load.rs deleted file mode 100644 index 186ea7e..0000000 --- a/src/load.rs +++ /dev/null @@ -1,69 +0,0 @@ - -use std::collections::HashMap; -use serde_json::Value; -use super::assemblage::Assemblage; -use super::assemblages::{Player, Grass, Wall}; - -pub fn load_assemblages(data: Value) -> Vec<Box<dyn Assemblage>> { - parse_assemblages(data).into_iter().filter_map(|x| x).collect() -} - -fn parse_assemblages(data: Value) -> Vec<Option<Box<dyn Assemblage>>> { - match data { - Value::String(txt) => vec![from_args(txt, Vec::new(), HashMap::new())], - Value::Array(list) => list.into_iter().map(parse_assemblages).flatten().collect(), - Value::Object(mut obj) => { - if let Some(Value::String(typename)) = obj.remove("type") { - let args = if let Some(Value::Array(a)) = obj.remove("args") {a} else {Vec::new()}; - let kwargs: HashMap<String, Value> = if let Some(Value::Object(o)) = obj.remove("kwargs") { - o.into_iter().collect() - } else {HashMap::new()}; - vec![from_args( - typename, - args, - kwargs - )] - } else {Vec::new()} - }, - _ => Vec::new() - } -} - -macro_rules! dynasm { - ($typ:ident) => {Some({ - let b : Box<dyn Assemblage> = Box::new({ - let o = $typ::default(); - o - }); - b - })} -} - -fn from_args(typename: String, args: Vec<Value>, kwargs: HashMap<String, Value>) -> Option<Box<dyn Assemblage>>{ - let mut obj = match typename.as_str() { - "player" => dynasm!(Player), - "grass" => dynasm!(Grass), - "wall" => dynasm!(Wall), - _ => None - }?; - obj.init_from_json(args, kwargs); - Some(obj) -} - - -#[cfg(test)] -mod tests { - use super::*; - use serde_json::json; - use std::any::Any; - #[test] - fn test_assemblage_from_json() { - let mut walls1 = load_assemblages(json!("wall")); - assert_eq!(walls1.len(), 1); - let wallbox1 = walls1.pop().unwrap(); -// assert_eq!(, vec![Box::new(Wall{})]); -// assert_eq!(load_assemblages(json!("wall", ["test"], {"abc": 123})), Wall{}); - } -} - - |
