Merge pull request #86 from horacimacias/master

Rename vector fields in struct
This commit is contained in:
Marc-Antoine ARNAUD 2020-08-03 11:27:57 +02:00 committed by GitHub
commit b7545504ac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 95 additions and 6 deletions

View File

@ -63,6 +63,72 @@ fn ser_list_of_items() {
let content =
"<base><items><field>something1</field></items><items><field>something2</field></items></base>";
serialize_and_validate!(model2, content);
#[derive(YaSerialize, PartialEq, Debug)]
#[yaserde(rename = "base")]
pub struct XmlStructOfStructRenamedField {
#[yaserde(rename = "listField")]
items: Vec<SubStruct>,
}
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 = "<base><listField><field>something1</field></listField><listField><field>something2</field></listField></base>";
serialize_and_validate!(model3, content);
#[derive(YaSerialize, PartialEq, Debug)]
#[yaserde(rename = "base")]
pub struct XmlStructOfStructNonFlattenedField {
//#[yaserde(flatten)]
items: Vec<SubStruct>,
}
let model3 = XmlStructOfStructNonFlattenedField {
items: vec![
SubStruct {
field: "something1".to_string(),
},
SubStruct {
field: "something2".to_string(),
},
],
};
let content =
"<base><items><field>something1</field></items><items><field>something2</field></items></base>";
serialize_and_validate!(model3, content);
#[derive(YaSerialize, PartialEq, Debug)]
#[yaserde(rename = "base")]
pub struct XmlStructOfStructFlattenedField {
#[yaserde(flatten)]
items: Vec<SubStruct>,
}
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 = "<base><field>something1</field><field>something2</field></base>";
serialize_and_validate!(model3, content);
}
#[test]

View File

@ -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!();
}