diff --git a/serde_derive_internals/src/attr.rs b/serde_derive_internals/src/attr.rs index f6021910..caf306cf 100644 --- a/serde_derive_internals/src/attr.rs +++ b/serde_derive_internals/src/attr.rs @@ -719,6 +719,12 @@ impl Field { skip_deserializing.set_true(); } + // Parse `#[serde(skip)]` + MetaItem(Word(ref name)) if name == "skip" => { + skip_serializing.set_true(); + skip_deserializing.set_true(); + }, + // Parse `#[serde(skip_serializing_if = "...")]` MetaItem(NameValue(ref name, ref lit)) if name == "skip_serializing_if" => { if let Ok(path) = parse_lit_into_path(cx, name.as_ref(), lit) { diff --git a/test_suite/tests/test_annotations.rs b/test_suite/tests/test_annotations.rs index f2604d45..cb9642e8 100644 --- a/test_suite/tests/test_annotations.rs +++ b/test_suite/tests/test_annotations.rs @@ -580,6 +580,41 @@ fn test_skip_serializing_struct() { ); } +#[derive(Debug, PartialEq, Serialize, Deserialize)] +struct SkipStruct +{ + a: i8, + #[serde(skip)] + b: B, +} + +#[test] +fn test_skip_struct() { + assert_ser_tokens( + &SkipStruct { a: 1, b: 2 }, + &[ + Token::Struct { name: "SkipStruct", len: 1 }, + + Token::Str("a"), + Token::I8(1), + + Token::StructEnd, + ], + ); + + assert_de_tokens( + &SkipStruct { a: 1, b: 0 }, + &[ + Token::Struct { name: "SkipStruct", len: 1 }, + + Token::Str("a"), + Token::I8(1), + + Token::StructEnd, + ], + ); +} + #[derive(Debug, PartialEq, Serialize)] enum SkipSerializingEnum<'a, B, C> where