summaryrefslogtreecommitdiff
path: root/src/componentparameter.rs
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2020-03-05 13:17:36 +0100
committertroido <troido@protonmail.com>2020-03-05 13:17:36 +0100
commit7846b871f5c9d57a19dbf09b7acbf0d6b38a69ca (patch)
tree0e81bd4b9da194ebbcf85b9c61578dbf17bb8013 /src/componentparameter.rs
parent170741fe959d30ee43ce689fd5fbae725cc1dae4 (diff)
new componentparameters to get own template and name
Diffstat (limited to 'src/componentparameter.rs')
-rw-r--r--src/componentparameter.rs23
1 files changed, 16 insertions, 7 deletions
diff --git a/src/componentparameter.rs b/src/componentparameter.rs
index fdbfc71..bcf42e9 100644
--- a/src/componentparameter.rs
+++ b/src/componentparameter.rs
@@ -4,6 +4,7 @@ use rand::Rng;
use serde_json::Value;
use crate::{
parameter::{Parameter, ParameterType},
+ Template,
Result,
aerr
};
@@ -16,16 +17,18 @@ pub enum ComponentParameter {
Constant(Parameter),
Argument(String),
Random(Vec<ComponentParameter>),
- Concat(Vec<ComponentParameter>)
+ Concat(Vec<ComponentParameter>),
+ TemplateSelf,
+ TemplateName
}
impl ComponentParameter {
- pub fn evaluate(&self, arguments: &HashMap<&str, Parameter>) -> Option<Parameter> {
- self.evaluate_(arguments, 0)
+ pub fn evaluate(&self, arguments: &HashMap<&str, Parameter>, template: &Template) -> Option<Parameter> {
+ self.evaluate_(arguments, template, 0)
}
- fn evaluate_(&self, arguments: &HashMap<&str, Parameter>, nesting: usize) -> Option<Parameter> {
+ fn evaluate_(&self, arguments: &HashMap<&str, Parameter>, template: &Template, nesting: usize) -> Option<Parameter> {
if nesting > MAX_NESTING {
return None;
}
@@ -38,12 +41,12 @@ impl ComponentParameter {
}
Self::Random(options) => {
let r = rand::thread_rng().gen_range(0, options.len());
- options[r].evaluate_(arguments, nesting + 1)
+ options[r].evaluate_(arguments, template, nesting + 1)
}
Self::Concat(options) => {
let mut string = String::new();
for option in options {
- if let Parameter::String(s) = option.evaluate_(arguments, nesting+1)? {
+ if let Parameter::String(s) = option.evaluate_(arguments, template, nesting+1)? {
string.push_str(&s);
} else {
return None;
@@ -51,6 +54,8 @@ impl ComponentParameter {
}
Some(Parameter::String(string))
}
+ Self::TemplateSelf => Some(Parameter::Template(template.clone())),
+ Self::TemplateName => Some(Parameter::String(template.name.0.clone()))
}
}
@@ -83,6 +88,8 @@ impl ComponentParameter {
}
Ok(Self::Concat(options))
},
+ "self" => Ok(Self::TemplateSelf),
+ "name" => Ok(Self::TemplateName),
_ => Err(aerr!("unknown compparam type"))
}
}
@@ -101,7 +108,9 @@ impl ComponentParameter {
}
typ
},
- Self::Concat(_s) => ParameterType::String
+ Self::Concat(_s) => ParameterType::String,
+ Self::TemplateSelf => ParameterType::Template,
+ Self::TemplateName => ParameterType::String
})
}
}