1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
use crate::value::Value;
use crate::types::*;
impl Value {
pub fn freduce(&mut self, appfn: AppFn2, value1: Value) -> Self {
match self.dt {
LIST | RESULT => {
match &self.data {
Val::List(v) => {
let mut v1 = value1;
for i in v {
v1 = appfn(v1, i.clone());
}
return v1;
}
_ => return appfn(value1, self.clone()),
}
}
MAP | INFO | CONFIG | ASSOCIATION | CURRY | MESSAGE | CONDITIONAL | OBJECT | CLASS => {
match &self.data {
Val::Map(v) => {
let mut v1 = value1;
for (_,val) in v {
v1 = appfn(v1, val.clone());
}
return v1;
}
_ => return appfn(value1, self.clone()),
}
}
METRICS => {
match &self.data {
Val::Metrics(v) => {
let mut v1 = value1;
for i in v {
v1 = appfn(v1, Value::from_float(i.data));
}
return v1;
}
_ => return appfn(value1, self.clone()),
}
}
_ => {
return appfn(value1, self.clone());
}
}
}
}