@@ -31,84 +31,80 @@ use tinyjson::{JsonGenerateError, JsonParseError, JsonValue};
3131// "my_null": { "t": "null", "v": null }
3232// }
3333
34- /// Backend-specific JsonValue -> KvsValue conversion.
35- impl From < & JsonValue > for KvsValue {
36- fn from ( val : & JsonValue ) -> KvsValue {
34+ /// Backend-specific JsonValue -> KvsValue conversion (by value) .
35+ impl From < JsonValue > for KvsValue {
36+ fn from ( val : JsonValue ) -> KvsValue {
3737 match val {
38- JsonValue :: Object ( obj) => {
38+ JsonValue :: Object ( mut obj) => {
3939 // Type-tagged: { "t": ..., "v": ... }
4040 if let ( Some ( JsonValue :: String ( type_str) ) , Some ( value) ) =
41- ( obj. get ( "t" ) , obj. get ( "v" ) )
41+ ( obj. remove ( "t" ) , obj. remove ( "v" ) )
4242 {
4343 return match ( type_str. as_str ( ) , value) {
44- ( "i32" , JsonValue :: Number ( v) ) => KvsValue :: I32 ( * v as i32 ) ,
45- ( "u32" , JsonValue :: Number ( v) ) => KvsValue :: U32 ( * v as u32 ) ,
46- ( "i64" , JsonValue :: Number ( v) ) => KvsValue :: I64 ( * v as i64 ) ,
47- ( "u64" , JsonValue :: Number ( v) ) => KvsValue :: U64 ( * v as u64 ) ,
48- ( "f64" , JsonValue :: Number ( v) ) => KvsValue :: F64 ( * v) ,
49- ( "bool" , JsonValue :: Boolean ( v) ) => KvsValue :: Boolean ( * v) ,
50- ( "str" , JsonValue :: String ( v) ) => KvsValue :: String ( v. clone ( ) ) ,
44+ ( "i32" , JsonValue :: Number ( v) ) => KvsValue :: I32 ( v as i32 ) ,
45+ ( "u32" , JsonValue :: Number ( v) ) => KvsValue :: U32 ( v as u32 ) ,
46+ ( "i64" , JsonValue :: Number ( v) ) => KvsValue :: I64 ( v as i64 ) ,
47+ ( "u64" , JsonValue :: Number ( v) ) => KvsValue :: U64 ( v as u64 ) ,
48+ ( "f64" , JsonValue :: Number ( v) ) => KvsValue :: F64 ( v) ,
49+ ( "bool" , JsonValue :: Boolean ( v) ) => KvsValue :: Boolean ( v) ,
50+ ( "str" , JsonValue :: String ( v) ) => KvsValue :: String ( v) ,
5151 ( "null" , JsonValue :: Null ) => KvsValue :: Null ,
5252 ( "arr" , JsonValue :: Array ( v) ) => {
53- KvsValue :: Array ( v. iter ( ) . map ( KvsValue :: from) . collect ( ) )
53+ KvsValue :: Array ( v. into_iter ( ) . map ( KvsValue :: from) . collect ( ) )
5454 }
5555 ( "obj" , JsonValue :: Object ( v) ) => KvsValue :: Object (
56- v. iter ( )
57- . map ( |( k, v) | ( k. clone ( ) , KvsValue :: from ( v) ) )
58- . collect ( ) ,
56+ v. into_iter ( ) . map ( |( k, v) | ( k, KvsValue :: from ( v) ) ) . collect ( ) ,
5957 ) ,
60- _ => {
61- return KvsValue :: Null ;
62- }
58+ _ => KvsValue :: Null ,
6359 } ;
6460 }
6561 // If not a t-tagged object, treat as a map of key-value pairs (KvsMap)
6662 let map: KvsMap = obj
67- . iter ( )
68- . map ( |( k, v) | ( k. clone ( ) , KvsValue :: from ( v) ) )
63+ . into_iter ( )
64+ . map ( |( k, v) | ( k, KvsValue :: from ( v) ) )
6965 . collect ( ) ;
7066 KvsValue :: Object ( map)
7167 }
68+ JsonValue :: Array ( arr) => KvsValue :: Array ( arr. into_iter ( ) . map ( KvsValue :: from) . collect ( ) ) ,
7269 JsonValue :: Number ( _)
7370 | JsonValue :: Boolean ( _)
7471 | JsonValue :: String ( _)
75- | JsonValue :: Null
76- | JsonValue :: Array ( _) => KvsValue :: Null ,
72+ | JsonValue :: Null => KvsValue :: Null ,
7773 }
7874 }
7975}
8076
81- impl From < & KvsValue > for JsonValue {
82- fn from ( val : & KvsValue ) -> JsonValue {
77+ impl From < KvsValue > for JsonValue {
78+ fn from ( val : KvsValue ) -> JsonValue {
8379 let mut obj = HashMap :: new ( ) ;
8480 match val {
8581 KvsValue :: I32 ( n) => {
8682 obj. insert ( "t" . to_string ( ) , JsonValue :: String ( "i32" . to_string ( ) ) ) ;
87- obj. insert ( "v" . to_string ( ) , JsonValue :: Number ( * n as f64 ) ) ;
83+ obj. insert ( "v" . to_string ( ) , JsonValue :: Number ( n as f64 ) ) ;
8884 }
8985 KvsValue :: U32 ( n) => {
9086 obj. insert ( "t" . to_string ( ) , JsonValue :: String ( "u32" . to_string ( ) ) ) ;
91- obj. insert ( "v" . to_string ( ) , JsonValue :: Number ( * n as f64 ) ) ;
87+ obj. insert ( "v" . to_string ( ) , JsonValue :: Number ( n as f64 ) ) ;
9288 }
9389 KvsValue :: I64 ( n) => {
9490 obj. insert ( "t" . to_string ( ) , JsonValue :: String ( "i64" . to_string ( ) ) ) ;
95- obj. insert ( "v" . to_string ( ) , JsonValue :: Number ( * n as f64 ) ) ;
91+ obj. insert ( "v" . to_string ( ) , JsonValue :: Number ( n as f64 ) ) ;
9692 }
9793 KvsValue :: U64 ( n) => {
9894 obj. insert ( "t" . to_string ( ) , JsonValue :: String ( "u64" . to_string ( ) ) ) ;
99- obj. insert ( "v" . to_string ( ) , JsonValue :: Number ( * n as f64 ) ) ;
95+ obj. insert ( "v" . to_string ( ) , JsonValue :: Number ( n as f64 ) ) ;
10096 }
10197 KvsValue :: F64 ( n) => {
10298 obj. insert ( "t" . to_string ( ) , JsonValue :: String ( "f64" . to_string ( ) ) ) ;
103- obj. insert ( "v" . to_string ( ) , JsonValue :: Number ( * n) ) ;
99+ obj. insert ( "v" . to_string ( ) , JsonValue :: Number ( n) ) ;
104100 }
105101 KvsValue :: Boolean ( b) => {
106102 obj. insert ( "t" . to_string ( ) , JsonValue :: String ( "bool" . to_string ( ) ) ) ;
107- obj. insert ( "v" . to_string ( ) , JsonValue :: Boolean ( * b) ) ;
103+ obj. insert ( "v" . to_string ( ) , JsonValue :: Boolean ( b) ) ;
108104 }
109105 KvsValue :: String ( s) => {
110106 obj. insert ( "t" . to_string ( ) , JsonValue :: String ( "str" . to_string ( ) ) ) ;
111- obj. insert ( "v" . to_string ( ) , JsonValue :: String ( s. clone ( ) ) ) ;
107+ obj. insert ( "v" . to_string ( ) , JsonValue :: String ( s) ) ;
112108 }
113109 KvsValue :: Null => {
114110 obj. insert ( "t" . to_string ( ) , JsonValue :: String ( "null" . to_string ( ) ) ) ;
@@ -118,16 +114,16 @@ impl From<&KvsValue> for JsonValue {
118114 obj. insert ( "t" . to_string ( ) , JsonValue :: String ( "arr" . to_string ( ) ) ) ;
119115 obj. insert (
120116 "v" . to_string ( ) ,
121- JsonValue :: Array ( arr. iter ( ) . map ( JsonValue :: from) . collect ( ) ) ,
117+ JsonValue :: Array ( arr. into_iter ( ) . map ( JsonValue :: from) . collect ( ) ) ,
122118 ) ;
123119 }
124120 KvsValue :: Object ( map) => {
125121 obj. insert ( "t" . to_string ( ) , JsonValue :: String ( "obj" . to_string ( ) ) ) ;
126122 obj. insert (
127123 "v" . to_string ( ) ,
128124 JsonValue :: Object (
129- map. iter ( )
130- . map ( |( k, v) | ( k. clone ( ) , JsonValue :: from ( v) ) )
125+ map. into_iter ( )
126+ . map ( |( k, v) | ( k, JsonValue :: from ( v) ) )
131127 . collect ( ) ,
132128 ) ,
133129 ) ;
@@ -212,7 +208,7 @@ impl KvsBackend for JsonBackend {
212208 }
213209 }
214210
215- let kvs_value = KvsValue :: from ( & json_value) ;
211+ let kvs_value = KvsValue :: from ( json_value) ;
216212 if let KvsValue :: Object ( kvs_map) = kvs_value {
217213 Ok ( kvs_map)
218214 } else {
@@ -226,7 +222,7 @@ impl KvsBackend for JsonBackend {
226222 . with_file_name ( format ! ( "{}_0.json" , destination_path. display( ) ) ) ;
227223
228224 let kvs_value = KvsValue :: Object ( kvs. clone ( ) ) ;
229- let json_value = JsonValue :: from ( & kvs_value) ;
225+ let json_value = JsonValue :: from ( kvs_value) ;
230226
231227 let json_str = Self :: stringify ( & json_value) . map_err ( |_| ErrorCode :: JsonParserError ) ?;
232228 fs:: write ( & filename, & json_str) . map_err ( |_| ErrorCode :: KvsFileReadError ) ?;
0 commit comments