From c76ad9fe592506f4e3ffc357e1307720a0073087 Mon Sep 17 00:00:00 2001 From: Horaci Macias Date: Tue, 21 Jul 2020 09:11:59 +0200 Subject: [PATCH] Working on flatten --- yaserde/tests/serializer.rs | 23 +++++++++++++++++++++++ yaserde_derive/src/ser/expand_struct.rs | 18 ++++++++++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/yaserde/tests/serializer.rs b/yaserde/tests/serializer.rs index 9d5e102..174e5c0 100644 --- a/yaserde/tests/serializer.rs +++ b/yaserde/tests/serializer.rs @@ -85,6 +85,29 @@ fn ser_list_of_items() { // 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 XmlStructOfStructRenamedFlattenedField { + //#[yaserde(flatten)] + items: Vec, + } + + let model3 = XmlStructOfStructRenamedFlattenedField { + 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"; + //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 7931b6b..07df01b 100644 --- a/yaserde_derive/src/ser/expand_struct.rs +++ b/yaserde_derive/src/ser/expand_struct.rs @@ -267,13 +267,27 @@ pub fn serialize( } } }), - Field::FieldStruct { .. } => Some(quote! { + Field::FieldStruct { .. } => { + Some(quote! { + //&self.#label 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!(); }