Skip to content

Commit fbe22d4

Browse files
committed
Fix serializing Option and NewType structs
The serializer was not providing annotations for Option<T> or newtype structs. Signed-off-by: Chris Frantz <[email protected]>
1 parent f033864 commit fbe22d4

File tree

2 files changed

+21
-7
lines changed

2 files changed

+21
-7
lines changed

src/ser.rs

+8-2
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ impl<'s, 'a> ser::Serializer for &'s mut AnnotatedSerializer<'a> {
186186
where
187187
T: ?Sized + ser::Serialize,
188188
{
189-
value.serialize(self)
189+
self.serialize(value, None)
190190
}
191191

192192
fn serialize_unit(self) -> Result<Self::Ok, Self::Error> {
@@ -214,7 +214,13 @@ impl<'s, 'a> ser::Serializer for &'s mut AnnotatedSerializer<'a> {
214214
where
215215
T: ?Sized + ser::Serialize,
216216
{
217-
value.serialize(self)
217+
let field = MemberId::Index(0);
218+
let node = self.serialize(value, self.annotate(None, &field))?;
219+
if let Some(c) = self.comment(None, &field) {
220+
Ok(Document::Fragment(vec![c, node]))
221+
} else {
222+
Ok(node)
223+
}
218224
}
219225

220226
fn serialize_newtype_variant<T>(

tests/test_format.rs

+13-5
Original file line numberDiff line numberDiff line change
@@ -265,19 +265,24 @@ enum NesAddress {
265265
Chr(#[annotate(format=hex)] u8, #[annotate(format=hex)] u16),
266266
}
267267

268+
#[derive(Serialize, Deserialize, Annotate, Debug, PartialEq)]
269+
struct CpuAddress(#[annotate(format=hex)] u16);
270+
268271
#[derive(Serialize, Deserialize, Debug, PartialEq)]
269272
struct Addresses {
270273
a: NesAddress,
271274
b: NesAddress,
272-
c: NesAddress,
275+
c: Option<NesAddress>,
276+
d: CpuAddress,
273277
}
274278

275279
#[test]
276280
fn test_nes_addresses() -> Result<()> {
277281
let value = Addresses {
278282
a: NesAddress::File(0x4010),
279283
b: NesAddress::Prg(1, 0x8000),
280-
c: NesAddress::Chr(2, 0x400),
284+
c: Some(NesAddress::Chr(2, 0x400)),
285+
d: CpuAddress(0xFFFA),
281286
};
282287

283288
tester!(
@@ -294,7 +299,8 @@ fn test_nes_addresses() -> Result<()> {
294299
},
295300
"c": {
296301
"Chr": [2, 1024]
297-
}
302+
},
303+
"d": 65530
298304
}"#
299305
);
300306

@@ -315,7 +321,8 @@ fn test_nes_addresses() -> Result<()> {
315321
c: {
316322
// NES CHR bank:address
317323
Chr: [0x2, 0x400]
318-
}
324+
},
325+
d: 0xFFFA
319326
}"#
320327
);
321328

@@ -333,7 +340,8 @@ fn test_nes_addresses() -> Result<()> {
333340
Prg: [0x1, 0x8000]
334341
c:
335342
# NES CHR bank:address
336-
Chr: [0x2, 0x400]"#
343+
Chr: [0x2, 0x400]
344+
d: 0xFFFA"#
337345
);
338346

339347
Ok(())

0 commit comments

Comments
 (0)