diff options
| author | troido <troido@protonmail.com> | 2020-02-07 16:37:19 +0100 |
|---|---|---|
| committer | troido <troido@protonmail.com> | 2020-02-07 16:37:19 +0100 |
| commit | 3d0d1279627aeee984fa29546aeee6855c9ef2c9 (patch) | |
| tree | c80080f1b6f36b76e80298c36af3b7a4b5af0cb9 /src/componentparameter.rs | |
| parent | 2cbca1116f71fadae48db1809de13f5fd8c4f659 (diff) | |
limited nesting in evaluation
Diffstat (limited to 'src/componentparameter.rs')
| -rw-r--r-- | src/componentparameter.rs | 13 |
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) } } } |
