diff options
| author | troido <troido@protonmail.com> | 2020-09-28 14:29:53 +0200 |
|---|---|---|
| committer | troido <troido@protonmail.com> | 2020-09-28 14:29:53 +0200 |
| commit | eb9853dec24045adb7447e1c8ac186e52204b690 (patch) | |
| tree | 7fb944311d64ca5a8ff41748fbd5209a2eaf9806 /src/assemblage.rs | |
| parent | 25abc71200803f7238c56c93b8b89160ff6c1086 (diff) | |
removed parametertype
Diffstat (limited to 'src/assemblage.rs')
| -rw-r--r-- | src/assemblage.rs | 60 |
1 files changed, 15 insertions, 45 deletions
diff --git a/src/assemblage.rs b/src/assemblage.rs index 5541ec1..fb60463 100644 --- a/src/assemblage.rs +++ b/src/assemblage.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; use serde::{de, Serialize, Deserialize, Deserializer}; use crate::{ parameterexpression::ParameterExpression, - parameter::{Parameter, ParameterType}, + parameter::{Parameter}, componentwrapper::{ComponentWrapper, ComponentType}, components::{Serialise, Clan}, Template, @@ -11,11 +11,10 @@ use crate::{ aerr }; -type ArgumentDef = (String, ParameterType, Option<Parameter>); #[derive(Debug, PartialEq, Clone)] pub struct Assemblage { - pub arguments: Vec<ArgumentDef>, + pub arguments: HashMap<String, Option<Parameter>>, pub components: Vec<(ComponentType, HashMap<String, ParameterExpression>)>, pub save: bool, pub extract: Vec<(String, ComponentType, String)> @@ -35,24 +34,16 @@ impl Assemblage { fn prepare_arguments(&self, kwargs: &HashMap<String, Parameter>) -> AnyResult<HashMap<&str, Parameter>> { let mut arguments: HashMap<&str, Parameter> = HashMap::new(); - for (name, typ, def) in self.arguments.iter() { + for (name, def) in self.arguments.iter() { let param: Parameter= { if let Some(val) = kwargs.get(name) { val.clone() } else if let Some(val) = def { val.clone() } else { - return Err(aerr!("argument <{:?}> has no value", (name, typ, def))) + return Err(aerr!("argument <{:?}> has no value", (name, def))) } }; - if param.paramtype() != *typ { - return Err(aerr!( - "argument has incorrect type: {:?}, {:?}, {:?}", - (name, typ, def), - param.paramtype(), - param - )); - } arguments.insert(name, param); } Ok(arguments) @@ -112,12 +103,7 @@ impl<'de> Deserialize<'de> for Assemblage { components.push((ComponentType::Substitute, compmap!{into: sub})); } Ok(Assemblage { - arguments: arguments.into_iter() - .map(|arg| match arg { - ArgumentDefSave::Long(name, typ, def) => (name, typ, Some(def)), - ArgumentDefSave::Short(name, typ) => (name, typ, None) - }) - .collect(), + arguments, components, save, extract: extract.into_iter().map(|(k, (t, v))| (k, t, v)).collect() @@ -125,15 +111,9 @@ impl<'de> Deserialize<'de> for Assemblage { } } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] -#[serde(untagged)] -enum ArgumentDefSave{ - Long(String, ParameterType, Parameter), - Short(String, ParameterType) -} -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] struct AssemblageSave { #[serde(default)] - pub arguments: Vec<ArgumentDefSave>, + pub arguments: HashMap<String, Option<Parameter>>, #[serde(default)] pub components: Vec<(ComponentType, HashMap<String, ParameterExpression>)>, #[serde(default="return_true")] @@ -161,11 +141,11 @@ mod tests { fn empty_assemblage_deserialize() { assert_eq!( Assemblage::deserialize(&json!({ - "arguments": [], + "arguments": {}, "components": [] })).unwrap(), Assemblage{ - arguments: vec![], + arguments: hashmap!{}, components: vec![], save: true, extract: Vec::new() @@ -176,9 +156,7 @@ mod tests { #[test] fn grass_deserialize(){ let result = Assemblage::deserialize(&json!({ - "arguments": [ - ["sprite", "string", "grass1"] - ], + "arguments": {"sprite": "grass1"}, "components": [ ["Visible", { "sprite": {"$arg": "sprite"}, @@ -188,7 +166,7 @@ mod tests { ] })).unwrap(); let constructed = Assemblage{ - arguments: vec![("sprite".to_string(), ParameterType::String, Some(Parameter::String("grass1".to_string())))], + arguments: hashmap!{"sprite".to_string() => Some(Parameter::String("grass1".to_string()))}, components: vec![ (ComponentType::Visible, hashmap!( "sprite".to_string() => ParameterExpression::Argument("sprite".to_string()), @@ -205,9 +183,7 @@ mod tests { #[test] fn invalid_component_name(){ Assemblage::deserialize(&json!({ - "arguments": [ - ["sprite", "string", null] - ], + "arguments": {"sprite": null}, "components": [ ["visible", { // no capital so invalid "sprite": {"$arg": "sprite"}, @@ -224,9 +200,7 @@ mod tests { // #[test] fn invalid_parameter_type(){ Assemblage::deserialize(&json!({ - "arguments": [ - ["sprite", "string", "grass1"] - ], + "arguments": {"sprite": "grass1"}, "components": [ ["Visible", { "sprite": {"$arg": "sprite"}, @@ -244,9 +218,7 @@ mod tests { // #[test] fn wrong_argument_default(){ Assemblage::deserialize(&json!({ - "arguments": [ - ["sprite", "string", 1] - ], + "arguments": {"sprite": 1}, "components": [ ["Visible", { "sprite": {"$arg": "sprite"}, @@ -262,9 +234,7 @@ mod tests { #[test] fn null_argument(){ let result = Assemblage::deserialize(&json!({ - "arguments": [ - ["sprite", "string"] - ], + "arguments": {"sprite": null}, "components": [ ["Visible", { "sprite": {"$arg": "sprite"}, @@ -274,7 +244,7 @@ mod tests { ] })).unwrap(); let constructed = Assemblage{ - arguments: vec![("sprite".to_string(), ParameterType::String, None)], + arguments: hashmap!{"sprite".to_string() => None}, components: vec