mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-04-23 02:28:00 +00:00
Respect skip_serializing in tuple structs and variants
This commit is contained in:
@@ -966,6 +966,7 @@ fn serialize_tuple_struct_visitor(
|
|||||||
fields
|
fields
|
||||||
.iter()
|
.iter()
|
||||||
.enumerate()
|
.enumerate()
|
||||||
|
.filter(|&(_, ref field)| !field.attrs.skip_serializing())
|
||||||
.map(|(i, field)| {
|
.map(|(i, field)| {
|
||||||
let mut field_expr = if is_enum {
|
let mut field_expr = if is_enum {
|
||||||
let id = Ident::new(&format!("__field{}", i), Span::call_site());
|
let id = Ident::new(&format!("__field{}", i), Span::call_site());
|
||||||
|
|||||||
@@ -657,6 +657,44 @@ fn test_skip_serializing_struct() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq, Serialize)]
|
||||||
|
struct SkipSerializingTupleStruct<'a, B, C>(
|
||||||
|
&'a i8,
|
||||||
|
#[serde(skip_serializing)] B,
|
||||||
|
#[serde(skip_serializing_if = "ShouldSkip::should_skip")] C,
|
||||||
|
)
|
||||||
|
where
|
||||||
|
C: ShouldSkip;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_skip_serializing_tuple_struct() {
|
||||||
|
let a = 1;
|
||||||
|
assert_ser_tokens(
|
||||||
|
&SkipSerializingTupleStruct(&a, 2, 3),
|
||||||
|
&[
|
||||||
|
Token::TupleStruct {
|
||||||
|
name: "SkipSerializingTupleStruct",
|
||||||
|
len: 2,
|
||||||
|
},
|
||||||
|
Token::I8(1),
|
||||||
|
Token::I32(3),
|
||||||
|
Token::TupleStructEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_ser_tokens(
|
||||||
|
&SkipSerializingTupleStruct(&a, 2, 123),
|
||||||
|
&[
|
||||||
|
Token::TupleStruct {
|
||||||
|
name: "SkipSerializingTupleStruct",
|
||||||
|
len: 2,
|
||||||
|
},
|
||||||
|
Token::I8(1),
|
||||||
|
Token::TupleStructEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
||||||
struct SkipStruct<B> {
|
struct SkipStruct<B> {
|
||||||
a: i8,
|
a: i8,
|
||||||
@@ -705,6 +743,11 @@ where
|
|||||||
#[serde(skip_serializing_if = "ShouldSkip::should_skip")]
|
#[serde(skip_serializing_if = "ShouldSkip::should_skip")]
|
||||||
c: C,
|
c: C,
|
||||||
},
|
},
|
||||||
|
Tuple(
|
||||||
|
&'a i8,
|
||||||
|
#[serde(skip_serializing)] B,
|
||||||
|
#[serde(skip_serializing_if = "ShouldSkip::should_skip")] C,
|
||||||
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@@ -743,6 +786,33 @@ fn test_skip_serializing_enum() {
|
|||||||
Token::StructVariantEnd,
|
Token::StructVariantEnd,
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
assert_ser_tokens(
|
||||||
|
&SkipSerializingEnum::Tuple(&a, 2, 3),
|
||||||
|
&[
|
||||||
|
Token::TupleVariant {
|
||||||
|
name: "SkipSerializingEnum",
|
||||||
|
variant: "Tuple",
|
||||||
|
len: 2,
|
||||||
|
},
|
||||||
|
Token::I8(1),
|
||||||
|
Token::I32(3),
|
||||||
|
Token::TupleVariantEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_ser_tokens(
|
||||||
|
&SkipSerializingEnum::Tuple(&a, 2, 123),
|
||||||
|
&[
|
||||||
|
Token::TupleVariant {
|
||||||
|
name: "SkipSerializingEnum",
|
||||||
|
variant: "Tuple",
|
||||||
|
len: 2,
|
||||||
|
},
|
||||||
|
Token::I8(1),
|
||||||
|
Token::TupleVariantEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, PartialEq)]
|
#[derive(Debug, PartialEq)]
|
||||||
|
|||||||
Reference in New Issue
Block a user