@@ -69,6 +69,17 @@ impl<'a, 'se> Serializer<'a, 'se> {
69
69
}
70
70
}
71
71
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
+
72
83
#[ inline( always) ]
73
84
pub fn get_next_ref < ' b > ( & ' b mut self ) -> Serializer < ' b , ' se > {
74
85
Serializer {
@@ -79,6 +90,17 @@ impl<'a, 'se> Serializer<'a, 'se> {
79
90
overwrite_patch : None ,
80
91
}
81
92
}
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
+ }
82
104
}
83
105
84
106
trait SerializeDynamicField < ' se > {
@@ -96,7 +118,7 @@ trait SerializeDynamicField<'se> {
96
118
impl < ' se > SerializeDynamicField < ' se > for Serializer < ' _ , ' se > {
97
119
fn start_node ( & mut self ) -> Result < ( ) , Error > {
98
120
self . ser . dst . step_by_u32 ( FDT_BEGIN_NODE ) ;
99
- if self . current_dep == 1 {
121
+ if self . current_dep == 0 {
100
122
// The name of root node should be empty.
101
123
self . ser . dst . step_by_u32 ( 0 ) ;
102
124
} else {
@@ -109,10 +131,11 @@ impl<'se> SerializeDynamicField<'se> for Serializer<'_, 'se> {
109
131
fn end_node ( & mut self ) -> Result < ( ) , Error > {
110
132
for patch in self . ser . patch_list . add_list ( self . current_dep ) {
111
133
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 ) ?;
113
136
}
114
137
self . ser . dst . step_by_u32 ( FDT_END_NODE ) ;
115
- if self . current_dep == 1 {
138
+ if self . current_dep == 0 {
116
139
self . ser . dst . step_by_u32 ( FDT_END ) ;
117
140
}
118
141
@@ -131,12 +154,12 @@ impl<'se> SerializeDynamicField<'se> for Serializer<'_, 'se> {
131
154
{
132
155
let value_type = match self . overwrite_patch {
133
156
Some ( data) => {
134
- let ser = self . get_next_ref ( ) ;
157
+ let ser = self . get_origin_ref ( ) ;
135
158
data. serialize ( ser) ;
136
159
data. patch_type
137
160
}
138
161
None => {
139
- let ser = self . get_next_ref ( ) ;
162
+ let ser = self . get_origin_ref ( ) ;
140
163
value. serialize ( ser) ?. 0
141
164
}
142
165
} ;
@@ -259,7 +282,7 @@ impl serde::ser::SerializeSeq for Serializer<'_, '_> {
259
282
where
260
283
T : ?Sized + serde:: ser:: Serialize ,
261
284
{
262
- value. serialize ( self . get_next_ref ( ) ) ?;
285
+ value. serialize ( self . get_origin_ref ( ) ) ?;
263
286
Ok ( ( ) )
264
287
}
265
288
@@ -277,7 +300,7 @@ impl serde::ser::SerializeTuple for Serializer<'_, '_> {
277
300
where
278
301
T : ?Sized + serde:: ser:: Serialize ,
279
302
{
280
- value. serialize ( self . get_next_ref ( ) ) ?;
303
+ value. serialize ( self . get_origin_ref ( ) ) ?;
281
304
Ok ( ( ) )
282
305
}
283
306
@@ -403,7 +426,7 @@ impl<'se> serde::ser::Serializer for Serializer<'_, 'se> {
403
426
}
404
427
405
428
fn serialize_unit ( self ) -> Result < Self :: Ok , Self :: Error > {
406
- todo ! ( "unit" ) ;
429
+ Ok ( ( ValueType :: Prop , self . ser . dst . get_offset ( ) ) )
407
430
}
408
431
409
432
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> {
475
498
}
476
499
477
500
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 ( ) ;
479
502
ser. start_node ( ) ?;
480
503
Ok ( ser)
481
504
}
@@ -485,7 +508,7 @@ impl<'se> serde::ser::Serializer for Serializer<'_, 'se> {
485
508
_name : & ' static str ,
486
509
_len : usize ,
487
510
) -> Result < Self :: SerializeStruct , Self :: Error > {
488
- let mut ser = self . get_next ( ) ;
511
+ let mut ser = self . get_origin ( ) ;
489
512
ser. start_node ( ) ?;
490
513
Ok ( ser)
491
514
}
0 commit comments