summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2020-02-07 16:37:19 +0100
committertroido <troido@protonmail.com>2020-02-07 16:37:19 +0100
commit3d0d1279627aeee984fa29546aeee6855c9ef2c9 (patch)
treec80080f1b6f36b76e80298c36af3b7a4b5af0cb9
parent2cbca1116f71fadae48db1809de13f5fd8c4f659 (diff)
limited nesting in evaluation
-rw-r--r--src/componentparameter.rs13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/componentparameter.rs b/src/componentparameter.rs
index b0d10cf..e6e0062 100644
--- a/src/componentparameter.rs
+++ b/src/componentparameter.rs
@@ -4,6 +4,9 @@ use rand::Rng;
use serde_json::Value;
use crate::parameter::{Parameter, ParameterType};
+const MAX_NESTING: usize = 3;
+
+
#[derive(Debug, PartialEq, Clone)]
pub enum ComponentParameter {
Constant(Parameter),
@@ -12,7 +15,15 @@ pub enum ComponentParameter {
}
impl ComponentParameter {
+
pub fn evaluate(&self, arguments: &HashMap<&str, Parameter>) -> Option<Parameter> {
+ self.evaluate_(arguments, 0)
+ }
+
+ fn evaluate_(&self, arguments: &HashMap<&str, Parameter>, nesting: usize) -> Option<Parameter> {
+ if nesting > MAX_NESTING {
+ return None;
+ }
match self {
Self::Constant(val) => {
Some(val.clone())
@@ -22,7 +33,7 @@ impl ComponentParameter {
}
Self::Random(options) => {
let r = rand::thread_rng().gen_range(0, options.len());
- options[r].evaluate(arguments)
+ options[r].evaluate_(arguments, nesting + 1)
}
}
}