Open roy-amelie opened 5 months ago
use yaserde_derive::{YaDeserialize, YaSerialize}; #[derive(Debug, Default, Eq, PartialEq, YaDeserialize, YaSerialize)] pub struct BasePerson { #[yaserde(rename = "EyeColor")] eye_color: String, #[yaserde(rename = "Age")] age: u8, } #[derive(Debug, Default, Eq, PartialEq, YaDeserialize, YaSerialize)] pub struct Home { #[yaserde(rename = "HasHome")] has_home: bool, #[yaserde(rename = "HasGarden")] has_garden: bool } #[derive(Debug, Default, Eq, PartialEq, YaDeserialize, YaSerialize)] pub struct Car { #[yaserde(rename = "CarColor")] color: String, #[yaserde(rename = "CarBrand")] brand: String, } #[derive(Debug, Default, Eq, PartialEq, YaDeserialize, YaSerialize)] pub struct Person { #[yaserde(flatten)] pub base: BasePerson, #[yaserde(flatten)] pub home: Home, #[yaserde(flatten)] pub car: Option<Car>, } #[cfg(test)] mod tests { use yaserde::de::from_str; use super::*; #[test] fn deserialize_without_car() { let person = r#"<?xml version="1.0" encoding="utf-8"?> <Person> <EyeColor>brown</EyeColor> <Age>25</Age> <HasHome>true</HasHome> <HasGarden>false</HasGarden> </Person>"#; let person: Person = from_str(person).unwrap(); let expected_person = Person { base: BasePerson { eye_color: "brown".to_owned(), age: 25, }, home: Home { has_home: true, has_garden: false, }, car: None, }; assert_eq!(person, expected_person); } }
This test fails, with the following result
let person = Person { base: BasePerson { eye_color: "brown", age: 25 }, home: Home { has_home: true, has_garden: false }, car: Some( Car { color: "", brand: "" } ) }
@roy-amelie ?
This test fails, with the following result