summaryrefslogtreecommitdiff
path: root/src/assemblage.rs
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2020-02-11 12:22:15 +0100
committertroido <troido@protonmail.com>2020-02-11 12:22:15 +0100
commit7821febc8ee4c89ca1825054e0baf39eea3a0380 (patch)
tree02c1f5d99528185a4059b63efd1725e5b850b6a9 /src/assemblage.rs
parent62138ca19acdef140359745ebee41be5e4c5ce09 (diff)
shortcut for defining visibles
Diffstat (limited to 'src/assemblage.rs')
-rw-r--r--src/assemblage.rs17
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)
}