mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-06-13 09:01:01 +00:00
Correctly serialize newtype variants for flatten
This commit is contained in:
@@ -1161,13 +1161,14 @@ impl<'a, M> Serializer for FlatMapSerializer<'a, M>
|
|||||||
self,
|
self,
|
||||||
_: &'static str,
|
_: &'static str,
|
||||||
_: u32,
|
_: u32,
|
||||||
_: &'static str,
|
variant: &'static str,
|
||||||
value: &T,
|
value: &T,
|
||||||
) -> Result<Self::Ok, Self::Error>
|
) -> Result<Self::Ok, Self::Error>
|
||||||
where
|
where
|
||||||
T: Serialize,
|
T: Serialize,
|
||||||
{
|
{
|
||||||
value.serialize(self)
|
try!(self.0.serialize_key(variant));
|
||||||
|
self.0.serialize_value(value)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn serialize_seq(self, _: Option<usize>) -> Result<Self::SerializeSeq, Self::Error> {
|
fn serialize_seq(self, _: Option<usize>) -> Result<Self::SerializeSeq, Self::Error> {
|
||||||
|
|||||||
@@ -1763,3 +1763,37 @@ fn test_lifetime_propagation_for_flatten() {
|
|||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_flatten_enum_newtype() {
|
||||||
|
#[derive(Serialize, Deserialize, PartialEq, Debug)]
|
||||||
|
struct S {
|
||||||
|
#[serde(flatten)]
|
||||||
|
flat: E,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, PartialEq, Debug)]
|
||||||
|
enum E {
|
||||||
|
Q(HashMap<String, String>),
|
||||||
|
}
|
||||||
|
|
||||||
|
let e = E::Q({
|
||||||
|
let mut map = HashMap::new();
|
||||||
|
map.insert("k".to_owned(), "v".to_owned());
|
||||||
|
map
|
||||||
|
});
|
||||||
|
let s = S { flat: e };
|
||||||
|
|
||||||
|
assert_tokens(
|
||||||
|
&s,
|
||||||
|
&[
|
||||||
|
Token::Map { len: None },
|
||||||
|
Token::Str("Q"),
|
||||||
|
Token::Map { len: Some(1) },
|
||||||
|
Token::Str("k"),
|
||||||
|
Token::Str("v"),
|
||||||
|
Token::MapEnd,
|
||||||
|
Token::MapEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user