Merge pull request #86 from horacimacias/master
Rename vector fields in struct
This commit is contained in:
commit
b7545504ac
@ -63,6 +63,72 @@ fn ser_list_of_items() {
|
|||||||
let content =
|
let content =
|
||||||
"<base><items><field>something1</field></items><items><field>something2</field></items></base>";
|
"<base><items><field>something1</field></items><items><field>something2</field></items></base>";
|
||||||
serialize_and_validate!(model2, content);
|
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]
|
#[test]
|
||||||
|
|||||||
@ -267,13 +267,36 @@ pub fn serialize(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
Field::FieldStruct { .. } => Some(quote! {
|
Field::FieldStruct { .. } => {
|
||||||
for item in &self.#label {
|
if field.is_flatten() {
|
||||||
writer.set_start_event_name(None);
|
Some(quote! {
|
||||||
writer.set_skip_start_end(false);
|
for item in &self.#label {
|
||||||
item.serialize(writer)?;
|
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 { .. } => {
|
Field::FieldVec { .. } => {
|
||||||
unimplemented!();
|
unimplemented!();
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user