diff options
| author | troido <troido@protonmail.com> | 2020-02-11 12:22:15 +0100 |
|---|---|---|
| committer | troido <troido@protonmail.com> | 2020-02-11 12:22:15 +0100 |
| commit | 7821febc8ee4c89ca1825054e0baf39eea3a0380 (patch) | |
| tree | 02c1f5d99528185a4059b63efd1725e5b850b6a9 /src/assemblage.rs | |
| parent | 62138ca19acdef140359745ebee41be5e4c5ce09 (diff) | |
shortcut for defining visibles
Diffstat (limited to 'src/assemblage.rs')
| -rw-r--r-- | src/assemblage.rs | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/assemblage.rs b/src/assemblage.rs index 3433a76..f84037c 100644 --- a/src/assemblage.rs +++ b/src/assemblage.rs @@ -4,6 +4,7 @@ use serde_json::{Value, json}; use super::componentparameter::ComponentParameter; use super::parameter::{Parameter, ParameterType}; use super::componentwrapper::{ComponentWrapper, ComponentType}; +use crate::hashmap; type ArgumentDef = (String, ParameterType, Option<Parameter>); @@ -63,10 +64,24 @@ impl Assemblage { } pub fn from_json(val: &Value) -> Result<Self, &'static str>{ - let assemblage = Self { + let mut assemblage = Self { arguments: Self::parse_definition_arguments(val.get("arguments").unwrap_or(&json!([])))?, components: Self::parse_definition_components(val.get("components").ok_or("property 'components' not found")?)? }; + if let Some(spritename) = val.get("sprite") { + let height = val.get("height").ok_or("defining a sprite requires also defining a height")?; + assemblage.components.push(( + ComponentType::Visible, + hashmap!( + "sprite".to_string() => ComponentParameter::Constant( + Parameter::String(spritename.as_str().ok_or("sprite not a string")?.to_string()) + ), + "height".to_string() => ComponentParameter::Constant( + Parameter::Float(height.as_f64().ok_or("height not a float")?) + ) + ) + )); + } assemblage.validate()?; Ok(assemblage) } |
