use serde::{Deserialize, Serialize};
use serde_yml::with::nested_singleton_map;
pub(crate) fn main() {
println!("\n❯ Executing examples/with/nested_singleton_map.rs");
#[derive(Serialize, Deserialize, PartialEq, Debug)]
enum InnerEnum {
Variant1,
Variant2(String),
Variant3 { field1: i32, field2: bool },
}
#[derive(Serialize, Deserialize, PartialEq, Debug)]
enum OuterEnum {
Variant1(InnerEnum),
Variant2 { inner: InnerEnum },
}
#[derive(Serialize, Deserialize, PartialEq, Debug)]
struct NestedEnumStruct {
#[serde(with = "nested_singleton_map")]
field: OuterEnum,
}
let input1 = NestedEnumStruct {
field: OuterEnum::Variant1(InnerEnum::Variant1),
};
let yaml1 = serde_yml::to_string(&input1).unwrap();
println!("\n✅ Serialized YAML for Example 1:\n{}", yaml1);
let output1: NestedEnumStruct =
serde_yml::from_str(&yaml1).unwrap();
println!("\n✅ Deserialized YAML for Example 1:\n{:#?}", output1);
assert_eq!(input1, output1);
let input2 = NestedEnumStruct {
field: OuterEnum::Variant1(InnerEnum::Variant2(
"value".to_string(),
)),
};
let yaml2 = serde_yml::to_string(&input2).unwrap();
println!("\n✅ Serialized YAML for Example 2:\n{}", yaml2);
let output2: NestedEnumStruct =
serde_yml::from_str(&yaml2).unwrap();
println!("\n✅ Deserialized YAML for Example 2:\n{:#?}", output2);
assert_eq!(input2, output2);
let input3 = NestedEnumStruct {
field: OuterEnum::Variant2 {
inner: InnerEnum::Variant3 {
field1: 42,
field2: true,
},
},
};
let yaml3 = serde_yml::to_string(&input3).unwrap();
println!("\n✅ Serialized YAML for Example 3:\n{}", yaml3);
let output3: NestedEnumStruct =
serde_yml::from_str(&yaml3).unwrap();
println!("\n✅ Deserialized YAML for Example 3:\n{:#?}", output3);
assert_eq!(input3, output3);
let input4 = NestedEnumStruct {
field: OuterEnum::Variant1(InnerEnum::Variant3 {
field1: 99,
field2: false,
}),
};
let yaml4 = serde_yml::to_string(&input4).unwrap();
println!("\n✅ Serialized YAML for Example 4:\n{}", yaml4);
let output4: NestedEnumStruct =
serde_yml::from_str(&yaml4).unwrap();
println!("\n✅ Deserialized YAML for Example 4:\n{:#?}", output4);
assert_eq!(input4, output4);
let input5 = NestedEnumStruct {
field: OuterEnum::Variant2 {
inner: InnerEnum::Variant2("another value".to_string()),
},
};
let yaml5 = serde_yml::to_string(&input5).unwrap();
println!("\n✅ Serialized YAML for Example 5:\n{}", yaml5);
let output5: NestedEnumStruct =
serde_yml::from_str(&yaml5).unwrap();
println!("\n✅ Deserialized YAML for Example 5:\n{:#?}", output5);
assert_eq!(input5, output5);
}