diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/parameterexpression.rs | 14 | ||||
| -rw-r--r-- | src/template.rs | 39 |
2 files changed, 19 insertions, 34 deletions
diff --git a/src/parameterexpression.rs b/src/parameterexpression.rs index 01f882f..0ad40b8 100644 --- a/src/parameterexpression.rs +++ b/src/parameterexpression.rs @@ -2,11 +2,11 @@ use std::collections::HashMap; use rand::Rng; use serde_json::{Value, json}; -use serde::{Deserialize, Deserializer, de}; +use serde::{Deserialize, Deserializer, de, Serialize}; use crate::{ parameter::{Parameter, ParameterType}, Template, - template::{SaveOption, EntityType}, + template::{EntityType}, Result as AnyResult, aerr, PResult, @@ -21,7 +21,7 @@ pub enum ParameterExpression { Constant(Parameter), List(Vec<ParameterExpression>), #[allow(dead_code)] // rustc bug does not know that this variant is used: https://github.com/rust-lang/rust/issues/68408 - Template{name: EntityType, kwargs: HashMap<String, ParameterExpression>, save: SaveOption}, + Template{name: EntityType, kwargs: HashMap<String, ParameterExpression>, save: Option<bool>}, Argument(String), Random(Vec<ParameterExpression>), Concat(Vec<ParameterExpression>), @@ -119,7 +119,7 @@ impl ParameterExpression { Value::String(s) => Ok(Self::Template{ name: EntityType(s.clone()), kwargs: HashMap::new(), - save: SaveOption::Default + save: None }), Value::Object(o) => { let name = EntityType(o.get("type").ok_or(perr!("template doesn't have 'type'"))?.as_str().ok_or(perr!("template type not a string"))?.to_string()); @@ -128,9 +128,9 @@ impl ParameterExpression { kwargs.insert(key.to_string(), Self::from_json(arg)?); } let save = match o.get("save") { - Some(Value::Bool(b)) if *b => SaveOption::Always, - Some(Value::Bool(_b)) => SaveOption::False, - None => SaveOption::Default, + Some(Value::Bool(b)) if *b => Some(true), + Some(Value::Bool(_b)) => Some(false), + None => None, _ => {return Err(perr!("save not a bool"))} }; Ok(Self::Template{name, kwargs, save}) diff --git a/src/template.rs b/src/template.rs index dc0e8b8..5d753a1 100644 --- a/src/template.rs +++ b/src/template.rs @@ -10,13 +10,6 @@ use crate::{ #[derive(Debug, PartialEq, Eq, Clone, Hash, Serialize, Deserialize)] pub struct EntityType(pub String); -#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)] -pub enum SaveOption { - Default, - False, - Always -} - #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(untagged)] enum TemplateSave { @@ -39,36 +32,28 @@ pub struct Template { pub name: EntityType, pub args: Vec<Parameter>, pub kwargs: HashMap<String, Parameter>, - pub save: SaveOption, + pub save: Option<bool>, } impl From<TemplateSave> for Template { fn from(ts: TemplateSave) -> Self { match ts { - TemplateSave::Name(name) => Self{name, args: Vec::new(), kwargs: HashMap::new(), save: SaveOption::Default}, - TemplateSave::Full{name, args, kwargs, save} => Self{name, args, kwargs, save: match save { - Some(true) => SaveOption::Always, - Some(false) => SaveOption::False, - None => SaveOption::Default - }} + TemplateSave::Name(name) => Self{name, args: Vec::new(), kwargs: HashMap::new(), save: None}, + TemplateSave::Full{name, args, kwargs, save} => Self{name, args, kwargs, save} } } } impl Into<TemplateSave> for Template { fn into(self) -> TemplateSave { - if self.args.is_empty() && self.kwargs.is_empty() && self.save == SaveOption::Default { + if self.args.is_empty() && self.kwargs.is_empty() && self.save == None { return TemplateSave::Name(self.name); } TemplateSave::Full { name: self.name, args: self.args, kwargs: self.kwargs, - save: match self.save { - SaveOption::Always => Some(true), - SaveOption::False => Some(false), - SaveOption::Default => None - } + save: self.save } } } @@ -80,7 +65,7 @@ impl Template { name: EntityType(name.to_string()), args: Vec::new(), kwargs, - save: SaveOption::Default + save: None } } @@ -90,8 +75,8 @@ impl Template { pub fn should_save(&self) -> bool { match self.save { - SaveOption::Default | SaveOption::Always => true, - SaveOption::False => false + None | Some(true) => true, + Some(false) => false } } @@ -100,19 +85,19 @@ impl Template { name: typ, args: Vec::new(), kwargs: HashMap::new(), - save: SaveOption::Default + save: None } } pub fn unsaved(mut self) -> Self { - if self.save == SaveOption::Default { - self.save = SaveOption::False + if self.save == None { + self.save = Some(false) } self } pub fn merge(mut self, other: Template) -> Self { - if self.save == SaveOption::Default { + if self.save == None { self.save = other.save; } for (key, value) in other.kwargs { |
