mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-06-14 14:01:02 +00:00
serialize tuple enums with single element directly as the value instead of a sequence
This commit is contained in:
@@ -27,6 +27,8 @@ pub enum Token<'a> {
|
||||
UnitStruct(&'a str),
|
||||
EnumUnit(&'a str, &'a str),
|
||||
|
||||
EnumSimple(&'a str, &'a str),
|
||||
|
||||
SeqStart(Option<usize>),
|
||||
TupleStructStart(&'a str, Option<usize>),
|
||||
EnumSeqStart(&'a str, &'a str, Option<usize>),
|
||||
@@ -80,6 +82,17 @@ impl<'a> Serializer for AssertSerializer<'a> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn visit_enum_simple<T>(&mut self,
|
||||
name: &str,
|
||||
variant: &str,
|
||||
value: T,
|
||||
) -> Result<(), ()>
|
||||
where T: Serialize,
|
||||
{
|
||||
assert_eq!(self.iter.next(), Some(Token::EnumSimple(name, variant)));
|
||||
value.serialize(self)
|
||||
}
|
||||
|
||||
fn visit_unit_struct(&mut self, name: &str) -> Result<(), ()> {
|
||||
assert_eq!(self.iter.next().unwrap(), Token::UnitStruct(name));
|
||||
Ok(())
|
||||
@@ -301,6 +314,7 @@ struct Struct {
|
||||
#[derive(Serialize)]
|
||||
enum Enum {
|
||||
Unit,
|
||||
One(i32),
|
||||
Seq(i32, i32),
|
||||
Map { a: i32, b: i32 },
|
||||
}
|
||||
@@ -554,6 +568,7 @@ declare_tests! {
|
||||
}
|
||||
test_enum {
|
||||
Enum::Unit => vec![Token::EnumUnit("Enum", "Unit")],
|
||||
Enum::One(42) => vec![Token::EnumSimple("Enum", "One"), Token::I32(42)],
|
||||
Enum::Seq(1, 2) => vec![
|
||||
Token::EnumSeqStart("Enum", "Seq", Some(2)),
|
||||
Token::SeqSep,
|
||||
|
||||
Reference in New Issue
Block a user