Added newtype struct support for flattening
This commit is contained in:
parent
ffcde25b6e
commit
ebc61baab2
@ -2143,10 +2143,21 @@ impl<'a, 'de, E> Deserializer<'de> for FlatMapDeserializer<'a, 'de, E>
|
||||
visitor.visit_map(FlatMapAccess::new(self.0.iter_mut(), Some(fields)))
|
||||
}
|
||||
|
||||
fn deserialize_newtype_struct<V>(
|
||||
self,
|
||||
_name: &str,
|
||||
visitor: V,
|
||||
) -> Result<V::Value, Self::Error>
|
||||
where
|
||||
V: Visitor<'de>,
|
||||
{
|
||||
visitor.visit_newtype_struct(self)
|
||||
}
|
||||
|
||||
forward_to_deserialize_any! {
|
||||
bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
|
||||
byte_buf option unit unit_struct newtype_struct seq tuple
|
||||
tuple_struct identifier ignored_any
|
||||
byte_buf option unit unit_struct seq tuple tuple_struct identifier
|
||||
ignored_any
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -64,7 +64,6 @@ enum Unsupported {
|
||||
Optional,
|
||||
Unit,
|
||||
UnitStruct,
|
||||
NewtypeStruct,
|
||||
Sequence,
|
||||
Tuple,
|
||||
TupleStruct,
|
||||
@ -83,7 +82,6 @@ impl Display for Unsupported {
|
||||
Unsupported::Optional => formatter.write_str("an optional"),
|
||||
Unsupported::Unit => formatter.write_str("unit"),
|
||||
Unsupported::UnitStruct => formatter.write_str("unit struct"),
|
||||
Unsupported::NewtypeStruct => formatter.write_str("newtype struct"),
|
||||
Unsupported::Sequence => formatter.write_str("a sequence"),
|
||||
Unsupported::Tuple => formatter.write_str("a tuple"),
|
||||
Unsupported::TupleStruct => formatter.write_str("a tuple struct"),
|
||||
@ -1153,13 +1151,12 @@ impl<'a, M> Serializer for FlatMapSerializer<'a, M>
|
||||
fn serialize_newtype_struct<T: ?Sized>(
|
||||
self,
|
||||
_: &'static str,
|
||||
_value: &T,
|
||||
value: &T,
|
||||
) -> Result<Self::Ok, Self::Error>
|
||||
where
|
||||
T: Serialize,
|
||||
{
|
||||
// TODO: can we do better here?
|
||||
Err(self.bad_type(Unsupported::NewtypeStruct))
|
||||
value.serialize(self)
|
||||
}
|
||||
|
||||
fn serialize_newtype_variant<T: ?Sized>(
|
||||
|
@ -127,9 +127,12 @@ enum FlattenStructEnum {
|
||||
struct FlattenStructTagContentEnumWrapper {
|
||||
outer: u32,
|
||||
#[serde(flatten)]
|
||||
data: FlattenStructTagContentEnum,
|
||||
data: FlattenStructTagContentEnumNewtype,
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
||||
struct FlattenStructTagContentEnumNewtype(pub FlattenStructTagContentEnum);
|
||||
|
||||
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "snake_case", tag = "type", content = "value")]
|
||||
enum FlattenStructTagContentEnum {
|
||||
@ -1394,10 +1397,12 @@ fn test_flatten_struct_enum() {
|
||||
fn test_flatten_struct_tag_content_enum() {
|
||||
let change_request = FlattenStructTagContentEnumWrapper {
|
||||
outer: 42,
|
||||
data: FlattenStructTagContentEnum::InsertInteger {
|
||||
index: 0,
|
||||
value: 42
|
||||
},
|
||||
data: FlattenStructTagContentEnumNewtype(
|
||||
FlattenStructTagContentEnum::InsertInteger {
|
||||
index: 0,
|
||||
value: 42
|
||||
}
|
||||
),
|
||||
};
|
||||
assert_de_tokens(
|
||||
&change_request,
|
||||
|
Loading…
x
Reference in New Issue
Block a user