diff --git a/yaserde/tests/serializer.rs b/yaserde/tests/serializer.rs
index 7b8cf6f..ab615ef 100644
--- a/yaserde/tests/serializer.rs
+++ b/yaserde/tests/serializer.rs
@@ -63,6 +63,72 @@ fn ser_list_of_items() {
let content =
"something1something2";
serialize_and_validate!(model2, content);
+
+ #[derive(YaSerialize, PartialEq, Debug)]
+ #[yaserde(rename = "base")]
+ pub struct XmlStructOfStructRenamedField {
+ #[yaserde(rename = "listField")]
+ items: Vec,
+ }
+
+ let model3 = XmlStructOfStructRenamedField {
+ items: vec![
+ SubStruct {
+ field: "something1".to_string(),
+ },
+ SubStruct {
+ field: "something2".to_string(),
+ },
+ ],
+ };
+
+ // SubStruct has 'rename' set, but it's ignored because SubStruct is used as a field of XmlStructOfStructRenamedField that overrides the 'rename
+ let content = "something1something2";
+ serialize_and_validate!(model3, content);
+
+ #[derive(YaSerialize, PartialEq, Debug)]
+ #[yaserde(rename = "base")]
+ pub struct XmlStructOfStructNonFlattenedField {
+ //#[yaserde(flatten)]
+ items: Vec,
+ }
+
+ let model3 = XmlStructOfStructNonFlattenedField {
+ items: vec![
+ SubStruct {
+ field: "something1".to_string(),
+ },
+ SubStruct {
+ field: "something2".to_string(),
+ },
+ ],
+ };
+
+ let content =
+ "something1something2";
+ serialize_and_validate!(model3, content);
+
+ #[derive(YaSerialize, PartialEq, Debug)]
+ #[yaserde(rename = "base")]
+ pub struct XmlStructOfStructFlattenedField {
+ #[yaserde(flatten)]
+ items: Vec,
+ }
+
+ let model3 = XmlStructOfStructFlattenedField {
+ items: vec![
+ SubStruct {
+ field: "something1".to_string(),
+ },
+ SubStruct {
+ field: "something2".to_string(),
+ },
+ ],
+ };
+
+ // SubStruct has 'rename' set, but it's ignored because SubStruct is used as a field of XmlStructOfStructRenamedFlattenedField that overrides the 'rename
+ let content = "something1something2";
+ serialize_and_validate!(model3, content);
}
#[test]
diff --git a/yaserde_derive/src/ser/expand_struct.rs b/yaserde_derive/src/ser/expand_struct.rs
index a92c16d..dcd6379 100644
--- a/yaserde_derive/src/ser/expand_struct.rs
+++ b/yaserde_derive/src/ser/expand_struct.rs
@@ -267,13 +267,36 @@ pub fn serialize(
}
}
}),
- Field::FieldStruct { .. } => Some(quote! {
- for item in &self.#label {
- writer.set_start_event_name(None);
- writer.set_skip_start_end(false);
- item.serialize(writer)?;
+ Field::FieldStruct { .. } => {
+ if field.is_flatten() {
+ Some(quote! {
+ for item in &self.#label {
+ writer.set_start_event_name(None);
+ writer.set_skip_start_end(true);
+ item.serialize(writer)?;
+ }
+ })
+ } else {
+ Some(quote! {
+ for item in &self.#label {
+ writer.set_start_event_name(Some(#label_name.to_string()));
+ writer.set_skip_start_end(false);
+ item.serialize(writer)?;
+ }
+ })
}
- }),
+ /*let (start_event, skip_start) = if field.is_flatten() {
+ (quote!(None), true)
+ } else {
+ (quote!(Some(#label_name.to_string())), false)
+ };
+
+ Some(quote! {
+ writer.set_start_event_name(#start_event);
+ writer.set_skip_start_end(#skip_start);
+ self.#label.serialize(writer)?;
+ })*/
+ }
Field::FieldVec { .. } => {
unimplemented!();
}