summaryrefslogtreecommitdiff
path: root/src/template.rs
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2020-02-07 15:29:36 +0100
committertroido <troido@protonmail.com>2020-02-07 15:29:36 +0100
commit3e2a991c0e3133428d490399a04822b973c1d99d (patch)
tree47e52c39578add8973f0a9fc6c17403fcc18fa21 /src/template.rs
parentbed274c683ffd18a55282247d47780c4f1bf84b5 (diff)
templates can be loaded from json now
Diffstat (limited to 'src/template.rs')
-rw-r--r--src/template.rs17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/template.rs b/src/template.rs
index b6b34cb..24e672b 100644
--- a/src/template.rs
+++ b/src/template.rs
@@ -1,6 +1,7 @@
use std::collections::HashMap;
+use serde_json::{json, Value};
use crate::parameter::Parameter;
#[derive(Debug)]
@@ -24,4 +25,20 @@ impl Template {
pub fn empty(name: &str) -> Self {
Self::new(name, HashMap::new())
}
+
+ pub fn from_json(val: Value) -> Option<Template> {
+ if val.is_string(){
+ return Some(Self::empty(val.as_str()?));
+ }
+ let name = val.get("type")?.as_str()?.to_string();
+ let mut args = Vec::new();
+ for arg in val.get("args").unwrap_or(&json!({})).as_array()? {
+ args.push(Parameter::guess_from_json(arg)?);
+ }
+ let mut kwargs = HashMap::new();
+ for (key, arg) in val.get("kwargs").unwrap_or(&json!({})).as_object()? {
+ kwargs.insert(key.to_string(), Parameter::guess_from_json(arg)?);
+ }
+ Some(Template {name, args, kwargs})
+ }
}