@@ -93,7 +93,7 @@ impl AstarteObject {
9393 Some ( value)
9494 }
9595
96- /// Returns the number of mapping elements .
96+ /// Returns the number of mapping data in the object .
9797 pub fn len ( & self ) -> usize {
9898 self . inner . len ( )
9999 }
@@ -122,16 +122,17 @@ impl FromIterator<(String, AstarteType)> for AstarteObject {
122122 }
123123}
124124
125+ /// Serialize the [`AstarteObject`] as a map.
125126impl Serialize for AstarteObject {
126127 fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
127128 where
128129 S : serde:: Serializer ,
129130 {
130- let mut s_map = serializer. serialize_map ( Some ( self . len ( ) ) ) ?;
131- for ( key , value) in self . iter ( ) {
132- s_map . serialize_entry ( key , value) ?;
131+ let mut s = serializer. serialize_map ( Some ( self . len ( ) ) ) ?;
132+ for ( name , value) in self . iter ( ) {
133+ s . serialize_entry ( name , value) ?;
133134 }
134- s_map . end ( )
135+ s . end ( )
135136 }
136137}
137138
@@ -212,6 +213,8 @@ impl Value {
212213
213214#[ cfg( test) ]
214215mod tests {
216+ use pretty_assertions:: assert_eq;
217+
215218 use super :: * ;
216219
217220 #[ test]
@@ -221,12 +224,86 @@ mod tests {
221224 assert ! ( val. is_individual( ) ) ;
222225 assert_eq ! ( val. as_individual( ) , Some ( & individual) ) ;
223226 assert_eq ! ( val. as_object( ) , None ) ;
227+ assert_eq ! ( val. take_individual( ) , Some ( individual) ) ;
228+
229+ let val = Value :: Individual ( AstarteType :: Integer ( 42 ) ) ;
230+ assert_eq ! ( val. take_object( ) , None ) ;
224231
225232 let val = Value :: Object ( AstarteObject :: new ( ) ) ;
226233 assert ! ( val. is_object( ) ) ;
227234 assert_eq ! ( val. as_individual( ) , None ) ;
228235 assert_eq ! ( val. as_object( ) , Some ( & AstarteObject :: new( ) ) ) ;
236+ assert_eq ! ( val. take_object( ) , Some ( AstarteObject :: new( ) ) ) ;
237+
238+ let val = Value :: Object ( AstarteObject :: new ( ) ) ;
239+ assert_eq ! ( val. take_individual( ) , None ) ;
229240
230241 assert ! ( Value :: Unset . is_unset( ) ) ;
231242 }
243+
244+ #[ test]
245+ fn create_with_capacity ( ) {
246+ let exp = 10 ;
247+ let object = AstarteObject :: with_capacity ( exp) ;
248+ assert_eq ! ( object. inner. capacity( ) , exp) ;
249+ }
250+
251+ #[ test]
252+ fn add_value_to_obj_and_replace ( ) {
253+ let mut object = AstarteObject :: new ( ) ;
254+ let exp = AstarteType :: from ( "foo" ) ;
255+ object. insert ( "foo" . to_string ( ) , exp. clone ( ) ) ;
256+ assert_eq ! ( object. get( "foo" ) , Some ( & exp) ) ;
257+
258+ let exp = AstarteType :: from ( "other" ) ;
259+ object. insert ( "foo" . to_string ( ) , exp. clone ( ) ) ;
260+ assert_eq ! ( object. get( "foo" ) , Some ( & exp) ) ;
261+ }
262+
263+ #[ test]
264+ fn iter_object_values ( ) {
265+ let values = [
266+ ( "foo" , AstarteType :: from ( "foo" ) ) ,
267+ ( "bar" , AstarteType :: from ( "bar" ) ) ,
268+ ( "some" , AstarteType :: from ( "some" ) ) ,
269+ ]
270+ . map ( |( n, v) | ( n. to_string ( ) , v) ) ;
271+
272+ let object = AstarteObject :: from_iter ( values. clone ( ) ) ;
273+
274+ assert ! ( !object. is_empty( ) ) ;
275+ assert_eq ! ( object. len( ) , values. len( ) ) ;
276+
277+ for ( exp, val) in object. iter ( ) . zip ( & values) {
278+ assert_eq ! ( exp, val)
279+ }
280+
281+ for ( exp, val) in object. into_key_values ( ) . zip ( values) {
282+ assert_eq ! ( exp, val)
283+ }
284+ }
285+
286+ #[ test]
287+ fn astarte_object_custom_serialize_map ( ) {
288+ let values = [
289+ ( "foo" , AstarteType :: from ( "foo" ) ) ,
290+ ( "bar" , AstarteType :: from ( "bar" ) ) ,
291+ ( "some" , AstarteType :: from ( "some" ) ) ,
292+ ]
293+ . map ( |( n, v) | ( n. to_string ( ) , v) ) ;
294+
295+ let object = AstarteObject :: from_iter ( values. clone ( ) ) ;
296+
297+ let json = serde_json:: to_string ( & object) . unwrap ( ) ;
298+
299+ let de: serde_json:: Value = serde_json:: from_str ( & json) . unwrap ( ) ;
300+ let map = de. as_object ( ) . unwrap ( ) ;
301+ assert_eq ! ( map. len( ) , object. len( ) ) ;
302+ let foo = map. get ( "foo" ) . and_then ( serde_json:: Value :: as_str) . unwrap ( ) ;
303+ assert_eq ! ( foo, "foo" ) ;
304+ let bar = map. get ( "bar" ) . and_then ( serde_json:: Value :: as_str) . unwrap ( ) ;
305+ assert_eq ! ( bar, "bar" ) ;
306+ let some = map. get ( "some" ) . and_then ( serde_json:: Value :: as_str) . unwrap ( ) ;
307+ assert_eq ! ( some, "some" ) ;
308+ }
232309}
0 commit comments