@@ -140,6 +140,16 @@ struct Nested {
140
140
float : f64 ,
141
141
}
142
142
143
+ #[ derive( Serialize ) ]
144
+ struct Empty { }
145
+
146
+ #[ derive( Serialize ) ]
147
+ struct Value {
148
+ #[ serde( rename = "$value" ) ]
149
+ float : f64 ,
150
+ string : & ' static str ,
151
+ }
152
+
143
153
#[ derive( Serialize ) ]
144
154
enum ExternallyTagged {
145
155
Unit ,
@@ -160,6 +170,12 @@ enum ExternallyTagged {
160
170
nested : Nested ,
161
171
string : & ' static str ,
162
172
} ,
173
+ Empty { } ,
174
+ Value {
175
+ #[ serde( rename = "$value" ) ]
176
+ float : f64 ,
177
+ string : & ' static str ,
178
+ } ,
163
179
}
164
180
165
181
#[ derive( Serialize ) ]
@@ -182,6 +198,12 @@ enum InternallyTagged {
182
198
nested : Nested ,
183
199
string : & ' static str ,
184
200
} ,
201
+ Empty { } ,
202
+ Value {
203
+ #[ serde( rename = "$value" ) ]
204
+ float : f64 ,
205
+ string : & ' static str ,
206
+ } ,
185
207
}
186
208
187
209
#[ derive( Serialize ) ]
@@ -203,6 +225,12 @@ enum AdjacentlyTagged {
203
225
nested : Nested ,
204
226
string : & ' static str ,
205
227
} ,
228
+ Empty { } ,
229
+ Value {
230
+ #[ serde( rename = "$value" ) ]
231
+ float : f64 ,
232
+ string : & ' static str ,
233
+ } ,
206
234
}
207
235
208
236
#[ derive( Serialize ) ]
@@ -224,6 +252,12 @@ enum Untagged {
224
252
nested : Nested ,
225
253
string : & ' static str ,
226
254
} ,
255
+ Empty { } ,
256
+ Value {
257
+ #[ serde( rename = "$value" ) ]
258
+ float : f64 ,
259
+ string : & ' static str ,
260
+ } ,
227
261
}
228
262
229
263
mod with_root {
@@ -273,6 +307,15 @@ mod with_root {
273
307
string: "answer" ,
274
308
}
275
309
=> r#"<root><float>42</float><string>answer</string></root>"# ) ;
310
+ serialize_as ! ( empty_struct:
311
+ Empty { }
312
+ => "<root/>" ) ;
313
+ serialize_as ! ( value:
314
+ Value {
315
+ float: 42.0 ,
316
+ string: "answer"
317
+ }
318
+ => r#"<root string="answer">42</root>"# ) ;
276
319
277
320
mod enum_ {
278
321
use super :: * ;
@@ -311,6 +354,15 @@ mod with_root {
311
354
string: "answer" ,
312
355
}
313
356
=> r#"<Flatten><float>42</float><string>answer</string></Flatten>"# ) ;
357
+ serialize_as ! ( empty_struct:
358
+ ExternallyTagged :: Empty { }
359
+ => "<Empty/>" ) ;
360
+ serialize_as ! ( value:
361
+ ExternallyTagged :: Value {
362
+ float: 42.0 ,
363
+ string: "answer"
364
+ }
365
+ => r#"<Value string="answer">42</Value>"# ) ;
314
366
}
315
367
316
368
mod internally_tagged {
@@ -341,6 +393,15 @@ mod with_root {
341
393
string: "answer" ,
342
394
}
343
395
=> r#"<root><tag>Flatten</tag><float>42</float><string>answer</string></root>"# ) ;
396
+ serialize_as ! ( empty_struct:
397
+ InternallyTagged :: Empty { }
398
+ => r#"<root tag="Empty"/>"# ) ;
399
+ serialize_as ! ( value:
400
+ InternallyTagged :: Value {
401
+ float: 42.0 ,
402
+ string: "answer"
403
+ }
404
+ => r#"<root tag="Value" string="answer">42</root>"# ) ;
344
405
}
345
406
346
407
mod adjacently_tagged {
@@ -374,6 +435,15 @@ mod with_root {
374
435
string: "answer" ,
375
436
}
376
437
=> r#"<root tag="Flatten"><content><float>42</float><string>answer</string></content></root>"# ) ;
438
+ serialize_as ! ( empty_struct:
439
+ AdjacentlyTagged :: Empty { }
440
+ => r#"<root tag="Empty"><content/></root>"# ) ;
441
+ serialize_as ! ( value:
442
+ AdjacentlyTagged :: Value {
443
+ float: 42.0 ,
444
+ string: "answer" ,
445
+ }
446
+ => r#"<root tag="Value"><content string="answer">42</content></root>"# ) ;
377
447
}
378
448
379
449
mod untagged {
@@ -409,6 +479,15 @@ mod with_root {
409
479
string: "answer" ,
410
480
}
411
481
=> r#"<root><float>42</float><string>answer</string></root>"# ) ;
482
+ serialize_as ! ( empty_struct:
483
+ Untagged :: Empty { }
484
+ => "<root/>" ) ;
485
+ serialize_as ! ( value:
486
+ Untagged :: Value {
487
+ float: 42.0 ,
488
+ string: "answer"
489
+ }
490
+ => r#"<root string="answer">42</root>"# ) ;
412
491
}
413
492
}
414
493
}
0 commit comments