diff --git a/yaserde/tests/flatten.rs b/yaserde/tests/flatten.rs index 4a8b4f0..660fabc 100644 --- a/yaserde/tests/flatten.rs +++ b/yaserde/tests/flatten.rs @@ -192,3 +192,42 @@ fn flatten_attribute() { serialize_and_validate!(model, content); deserialize_and_validate!(content, model, HtmlText); } + +#[test] +fn flatten_attribute_and_child() { + init(); + + #[derive(Default, PartialEq, Debug, YaDeserialize, YaSerialize)] + struct Node { + #[yaserde(flatten)] + base: Base, + #[yaserde(child)] + value: StringValue, + } + + #[derive(Default, PartialEq, Debug, YaDeserialize, YaSerialize)] + struct Base { + #[yaserde(attribute)] + id: String, + } + + #[derive(Default, PartialEq, Debug, YaDeserialize, YaSerialize)] + struct StringValue { + #[yaserde(text)] + string: String, + } + + let model = Node { + base: Base { + id: "Foo".to_owned(), + }, + value: StringValue { + string: "Bar".to_owned(), + }, + }; + + let content = r#"Bar"#; + + serialize_and_validate!(model, content); + deserialize_and_validate!(content, model, Node); +} diff --git a/yaserde_derive/src/de/expand_struct.rs b/yaserde_derive/src/de/expand_struct.rs index be794fa..4f5ba1f 100644 --- a/yaserde_derive/src/de/expand_struct.rs +++ b/yaserde_derive/src/de/expand_struct.rs @@ -160,6 +160,8 @@ pub fn parse( // If substruct's start element found then deserialize substruct let value = <#struct_name as ::yaserde::YaDeserialize>::deserialize(reader)?; #value_label #action; + // read EndElement + let _event = reader.next_event()?; } } })