Expand description
Serialize/deserialize an enum using a YAML map containing one entry in which the key identifies the variant name.
§Example
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, PartialEq, Debug)]
enum Enum {
Unit,
Newtype(usize),
Tuple(usize, usize),
Struct { value: usize },
}
#[derive(Serialize, Deserialize, PartialEq, Debug)]
struct Struct {
#[serde(with = "serde_yaml::with::singleton_map")]
w: Enum,
#[serde(with = "serde_yaml::with::singleton_map")]
x: Enum,
#[serde(with = "serde_yaml::with::singleton_map")]
y: Enum,
#[serde(with = "serde_yaml::with::singleton_map")]
z: Enum,
}
fn main() {
let object = Struct {
w: Enum::Unit,
x: Enum::Newtype(1),
y: Enum::Tuple(1, 1),
z: Enum::Struct { value: 1 },
};
let yaml = serde_yaml::to_string(&object).unwrap();
print!("{}", yaml);
let deserialized: Struct = serde_yaml::from_str(&yaml).unwrap();
assert_eq!(object, deserialized);
}
The representation using singleton_map
on all the fields is:
w: Unit
x:
Newtype: 1
y:
Tuple:
- 1
- 1
z:
Struct:
value: 1
Without singleton_map
, the default behavior would have been to serialize
as:
w: Unit
x: !Newtype 1
y: !Tuple
- 1
- 1
z: !Struct
value: 1