summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/parameterexpression.rs14
-rw-r--r--src/template.rs39
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 {