1use crate::value::Value;
2use crate::types::*;
3
4impl Value {
5 pub fn len(&self) -> usize {
6 match self.dt {
7 JSON => {
8 match self.cast_json() {
9 Ok(j_value) => {
10 if j_value.is_array() {
11 return j_value.as_array().unwrap().len();
12 } else {
13 return 1;
14 }
15 }
16 Err(_) => {
17 return 0;
18 }
19 }
20 }
21 STRING | TEXTBUFFER => {
22 match &self.data {
23 Val::String(v) => return v.len(),
24 _ => return 0,
25 }
26 }
27 LIST | RESULT => {
28 match &self.data {
29 Val::List(v) => return v.len(),
30 _ => return 0,
31 }
32 }
33 MATRIX => {
34 match &self.data {
35 Val::Matrix(v) => {
36 let mut c: usize = 0;
37 for r in v.iter() {
38 c = c + r.len();
39 }
40 return c;
41 }
42 _ => return 0,
43 }
44 }
45 QUEUE | FIFO => {
46 match &self.data {
47 Val::Queue(v) => return v.len(),
48 _ => return 0,
49 }
50 }
51 LAMBDA => {
52 match &self.data {
53 Val::Lambda(v) => return v.len(),
54 _ => return 0,
55 }
56 }
57 BIN | ENVELOPE => {
58 match &self.data {
59 Val::Binary(v) => return v.len(),
60 _ => return 0,
61 }
62 }
63 MAP | CURRY | CONDITIONAL | CLASS | OBJECT => {
64 match &self.data {
65 Val::Map(v) => return v.len(),
66 _ => return 0,
67 }
68 }
69 VALUEMAP => {
70 match &self.data {
71 Val::ValueMap(v) => return v.len(),
72 _ => return 0,
73 }
74 }
75 MESSAGE => {
76 let _ = match self.get("payload") {
77 Ok(res) => {
78 return res.len();
79 }
80 Err(_) => return 0,
81 };
82 }
83 METRICS => {
84 match &self.data {
85 Val::Metrics(v) => return v.len(),
86 _ => return 0,
87 }
88 }
89 NODATA => return 0,
90 _ => {
91 let str_val = match self.conv(STRING) {
92 Ok(str_val) => str_val,
93 Err(_) => {
94 return 1;
95 }
96 };
97 return str_val.len();
98 }
99 }
100 }
101}