@@ -25,27 +25,10 @@ pub fn collect_json_from_any_value(
25
25
value : super :: otel:: proto:: common:: v1:: Value ,
26
26
) -> BTreeMap < String , Value > {
27
27
let mut value_json: BTreeMap < String , Value > = BTreeMap :: new ( ) ;
28
- if value. str_val . is_some ( ) {
29
- value_json. insert (
30
- key. to_string ( ) ,
31
- Value :: String ( value. str_val . as_ref ( ) . unwrap ( ) . to_owned ( ) ) ,
32
- ) ;
33
- }
34
- if value. bool_val . is_some ( ) {
35
- value_json. insert ( key. to_string ( ) , Value :: Bool ( value. bool_val . unwrap ( ) ) ) ;
36
- }
37
- if value. int_val . is_some ( ) {
38
- value_json. insert (
39
- key. to_string ( ) ,
40
- Value :: String ( value. int_val . as_ref ( ) . unwrap ( ) . to_owned ( ) ) ,
41
- ) ;
42
- }
43
- if value. double_val . is_some ( ) {
44
- value_json. insert (
45
- key. to_string ( ) ,
46
- Value :: Number ( serde_json:: Number :: from_f64 ( value. double_val . unwrap ( ) ) . unwrap ( ) ) ,
47
- ) ;
48
- }
28
+ insert_if_some ( & mut value_json, key, & value. str_val ) ;
29
+ insert_bool_if_some ( & mut value_json, key, & value. bool_val ) ;
30
+ insert_if_some ( & mut value_json, key, & value. int_val ) ;
31
+ insert_number_if_some ( & mut value_json, key, & value. double_val ) ;
49
32
50
33
//ArrayValue is a vector of AnyValue
51
34
//traverse by recursively calling the same function
@@ -91,12 +74,7 @@ pub fn collect_json_from_any_value(
91
74
}
92
75
}
93
76
}
94
- if value. bytes_val . is_some ( ) {
95
- value_json. insert (
96
- key. to_string ( ) ,
97
- Value :: String ( value. bytes_val . as_ref ( ) . unwrap ( ) . to_owned ( ) ) ,
98
- ) ;
99
- }
77
+ insert_if_some ( & mut value_json, key, & value. bytes_val ) ;
100
78
101
79
value_json
102
80
}
@@ -135,3 +113,36 @@ pub fn flatten_attributes(attributes: &Vec<KeyValue>) -> BTreeMap<String, Value>
135
113
}
136
114
attributes_json
137
115
}
116
+
117
+ pub fn insert_if_some < T : ToString > (
118
+ map : & mut BTreeMap < String , Value > ,
119
+ key : & str ,
120
+ option : & Option < T > ,
121
+ ) {
122
+ if let Some ( value) = option {
123
+ map. insert ( key. to_string ( ) , Value :: String ( value. to_string ( ) ) ) ;
124
+ }
125
+ }
126
+
127
+ pub fn insert_number_if_some ( map : & mut BTreeMap < String , Value > , key : & str , option : & Option < f64 > ) {
128
+ if let Some ( value) = option {
129
+ if let Some ( number) = serde_json:: Number :: from_f64 ( * value) {
130
+ map. insert ( key. to_string ( ) , Value :: Number ( number) ) ;
131
+ }
132
+ }
133
+ }
134
+
135
+ pub fn insert_bool_if_some ( map : & mut BTreeMap < String , Value > , key : & str , option : & Option < bool > ) {
136
+ if let Some ( value) = option {
137
+ map. insert ( key. to_string ( ) , Value :: Bool ( * value) ) ;
138
+ }
139
+ }
140
+
141
+ pub fn insert_attributes ( map : & mut BTreeMap < String , Value > , attributes : & Option < Vec < KeyValue > > ) {
142
+ if let Some ( attrs) = attributes {
143
+ let attributes_json = flatten_attributes ( attrs) ;
144
+ for ( key, value) in attributes_json {
145
+ map. insert ( key, value) ;
146
+ }
147
+ }
148
+ }
0 commit comments