@@ -69,6 +69,17 @@ impl<'a, 'se> Serializer<'a, 'se> {
6969        } 
7070    } 
7171
72+     #[ inline( always) ]  
73+     pub  fn  get_origin ( self )  -> Serializer < ' a ,  ' se >  { 
74+         Serializer  { 
75+             ser :  self . ser , 
76+             current_dep :  self . current_dep , 
77+             current_name :  self . current_name , 
78+             prop_token_offset :  0 , 
79+             overwrite_patch :  None , 
80+         } 
81+     } 
82+ 
7283    #[ inline( always) ]  
7384    pub  fn  get_next_ref < ' b > ( & ' b  mut  self )  -> Serializer < ' b ,  ' se >  { 
7485        Serializer  { 
@@ -79,6 +90,17 @@ impl<'a, 'se> Serializer<'a, 'se> {
7990            overwrite_patch :  None , 
8091        } 
8192    } 
93+ 
94+     #[ inline( always) ]  
95+     pub  fn  get_origin_ref < ' b > ( & ' b  mut  self )  -> Serializer < ' b ,  ' se >  { 
96+         Serializer  { 
97+             ser :  self . ser , 
98+             current_dep :  self . current_dep , 
99+             current_name :  self . current_name , 
100+             prop_token_offset :  0 , 
101+             overwrite_patch :  None , 
102+         } 
103+     } 
82104} 
83105
84106trait  SerializeDynamicField < ' se >  { 
@@ -96,7 +118,7 @@ trait SerializeDynamicField<'se> {
96118impl < ' se >  SerializeDynamicField < ' se >  for  Serializer < ' _ ,  ' se >  { 
97119    fn  start_node ( & mut  self )  -> Result < ( ) ,  Error >  { 
98120        self . ser . dst . step_by_u32 ( FDT_BEGIN_NODE ) ; 
99-         if  self . current_dep  == 1  { 
121+         if  self . current_dep  == 0  { 
100122            // The name of root node should be empty. 
101123            self . ser . dst . step_by_u32 ( 0 ) ; 
102124        }  else  { 
@@ -109,10 +131,11 @@ impl<'se> SerializeDynamicField<'se> for Serializer<'_, 'se> {
109131    fn  end_node ( & mut  self )  -> Result < ( ) ,  Error >  { 
110132        for  patch in  self . ser . patch_list . add_list ( self . current_dep )  { 
111133            let  key = patch. get_depth_path ( self . current_dep  + 1 ) ; 
112-             self . serialize_dynamic_field ( key,  patch. data ) ?; 
134+             let  mut  ser = self . get_next_ref ( ) ; 
135+             ser. serialize_dynamic_field ( key,  patch. data ) ?; 
113136        } 
114137        self . ser . dst . step_by_u32 ( FDT_END_NODE ) ; 
115-         if  self . current_dep  == 1  { 
138+         if  self . current_dep  == 0  { 
116139            self . ser . dst . step_by_u32 ( FDT_END ) ; 
117140        } 
118141
@@ -131,12 +154,12 @@ impl<'se> SerializeDynamicField<'se> for Serializer<'_, 'se> {
131154    { 
132155        let  value_type = match  self . overwrite_patch  { 
133156            Some ( data)  => { 
134-                 let  ser = self . get_next_ref ( ) ; 
157+                 let  ser = self . get_origin_ref ( ) ; 
135158                data. serialize ( ser) ; 
136159                data. patch_type 
137160            } 
138161            None  => { 
139-                 let  ser = self . get_next_ref ( ) ; 
162+                 let  ser = self . get_origin_ref ( ) ; 
140163                value. serialize ( ser) ?. 0 
141164            } 
142165        } ; 
@@ -259,7 +282,7 @@ impl serde::ser::SerializeSeq for Serializer<'_, '_> {
259282    where 
260283        T :  ?Sized  + serde:: ser:: Serialize , 
261284    { 
262-         value. serialize ( self . get_next_ref ( ) ) ?; 
285+         value. serialize ( self . get_origin_ref ( ) ) ?; 
263286        Ok ( ( ) ) 
264287    } 
265288
@@ -277,7 +300,7 @@ impl serde::ser::SerializeTuple for Serializer<'_, '_> {
277300    where 
278301        T :  ?Sized  + serde:: ser:: Serialize , 
279302    { 
280-         value. serialize ( self . get_next_ref ( ) ) ?; 
303+         value. serialize ( self . get_origin_ref ( ) ) ?; 
281304        Ok ( ( ) ) 
282305    } 
283306
@@ -403,7 +426,7 @@ impl<'se> serde::ser::Serializer for Serializer<'_, 'se> {
403426    } 
404427
405428    fn  serialize_unit ( self )  -> Result < Self :: Ok ,  Self :: Error >  { 
406-         todo ! ( "unit" ) ; 
429+         Ok ( ( ValueType :: Prop ,   self . ser . dst . get_offset ( ) ) ) 
407430    } 
408431
409432    fn  serialize_unit_struct ( self ,  _name :  & ' static  str )  -> Result < Self :: Ok ,  Self :: Error >  { 
@@ -475,7 +498,7 @@ impl<'se> serde::ser::Serializer for Serializer<'_, 'se> {
475498    } 
476499
477500    fn  serialize_map ( self ,  _len :  Option < usize > )  -> Result < Self :: SerializeMap ,  Self :: Error >  { 
478-         let  mut  ser = self . get_next ( ) ; 
501+         let  mut  ser = self . get_origin ( ) ; 
479502        ser. start_node ( ) ?; 
480503        Ok ( ser) 
481504    } 
@@ -485,7 +508,7 @@ impl<'se> serde::ser::Serializer for Serializer<'_, 'se> {
485508        _name :  & ' static  str , 
486509        _len :  usize , 
487510    )  -> Result < Self :: SerializeStruct ,  Self :: Error >  { 
488-         let  mut  ser = self . get_next ( ) ; 
511+         let  mut  ser = self . get_origin ( ) ; 
489512        ser. start_node ( ) ?; 
490513        Ok ( ser) 
491514    } 
0 commit comments