diff options
| author | troido <troido@protonmail.com> | 2020-02-07 15:29:36 +0100 |
|---|---|---|
| committer | troido <troido@protonmail.com> | 2020-02-07 15:29:36 +0100 |
| commit | 3e2a991c0e3133428d490399a04822b973c1d99d (patch) | |
| tree | 47e52c39578add8973f0a9fc6c17403fcc18fa21 /src/template.rs | |
| parent | bed274c683ffd18a55282247d47780c4f1bf84b5 (diff) | |
templates can be loaded from json now
Diffstat (limited to 'src/template.rs')
| -rw-r--r-- | src/template.rs | 17 |
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}) + } } |
