@@ -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