summaryrefslogtreecommitdiff
path: root/src/template.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/template.rs')
-rw-r--r--src/template.rs35
1 files changed, 30 insertions, 5 deletions
diff --git a/src/template.rs b/src/template.rs
index 0ad1bc1..6b2dec3 100644
--- a/src/template.rs
+++ b/src/template.rs
@@ -11,12 +11,19 @@ use crate::{
#[derive(Debug, PartialEq, Eq, Clone, Hash)]
pub struct EntityType(pub String);
+#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
+enum SaveOption {
+ Default,
+ False,
+ Always
+}
+
#[derive(Debug, Clone, PartialEq)]
pub struct Template {
pub name: EntityType,
pub args: Vec<Parameter>,
pub kwargs: HashMap<String, Parameter>,
- pub save: bool
+ save: SaveOption,
}
@@ -27,7 +34,7 @@ impl Template {
name: EntityType(name.to_string()),
args: Vec::new(),
kwargs,
- save: true
+ save: SaveOption::Default
}
}
@@ -35,17 +42,26 @@ impl Template {
Self::new(name, HashMap::new())
}
+ pub fn should_save(&self) -> bool {
+ match self.save {
+ SaveOption::Default | SaveOption::Always => true,
+ SaveOption::False => false
+ }
+ }
+
pub fn from_entity_type(typ: EntityType) -> Self {
Self {
name: typ,
args: Vec::new(),
kwargs: HashMap::new(),
- save: true
+ save: SaveOption::Default
}
}
pub fn unsaved(mut self) -> Self {
- self.save = false;
+ if self.save == SaveOption::Default {
+ self.save = SaveOption::False
+ }
self
}
@@ -69,7 +85,16 @@ impl Template {
for (key, arg) in val.get("kwargs").unwrap_or(&json!({})).as_object().ok_or(perr!("template kwargs not a json object"))? {
kwargs.insert(key.to_string(), Parameter::guess_from_json(arg).ok_or(perr!("template kwarg {}: {:?} not a parameter", key, arg))?);
}
- let save = val.get("save").unwrap_or(&json!(true)).as_bool().ok_or(perr!("save not a bool"))?;
+ let save =
+ if let Some(saveval) = val.get("save") {
+ if saveval.as_bool().ok_or(perr!("save not a bool"))? {
+ SaveOption::Always
+ } else {
+ SaveOption::False
+ }
+ } else {
+ SaveOption::Default
+ };
Ok(Template {name, args, kwargs, save})
}