fix serialization for vec and structs
This commit is contained in:
parent
1880f4d997
commit
7a6ae6e6fe
@ -100,21 +100,29 @@ pub fn serialize(data_struct: &DataStruct, name: &Ident, root: &String, namespac
|
|||||||
Some(FieldType::FieldTypeString) =>
|
Some(FieldType::FieldTypeString) =>
|
||||||
Some(quote!{
|
Some(quote!{
|
||||||
let start_event = XmlEvent::start_element(#label_name);
|
let start_event = XmlEvent::start_element(#label_name);
|
||||||
let data_event = XmlEvent::characters(&self.#label);
|
|
||||||
let end_event = XmlEvent::end_element();
|
|
||||||
let _ret = writer.write(start_event);
|
let _ret = writer.write(start_event);
|
||||||
|
|
||||||
|
let data_event = XmlEvent::characters(&self.#label);
|
||||||
let _ret = writer.write(data_event);
|
let _ret = writer.write(data_event);
|
||||||
|
|
||||||
|
let end_event = XmlEvent::end_element();
|
||||||
let _ret = writer.write(end_event);
|
let _ret = writer.write(end_event);
|
||||||
}),
|
}),
|
||||||
Some(FieldType::FieldTypeStruct{..}) =>
|
Some(FieldType::FieldTypeStruct{..}) =>
|
||||||
Some(quote!{
|
Some(quote!{
|
||||||
writer.set_skip_start_end(false);
|
let start_event = XmlEvent::start_element(#label_name);
|
||||||
|
let _ret = writer.write(start_event);
|
||||||
|
|
||||||
|
writer.set_skip_start_end(true);
|
||||||
match self.#label.serialize(writer) {
|
match self.#label.serialize(writer) {
|
||||||
Ok(()) => {},
|
Ok(()) => {},
|
||||||
Err(msg) => {
|
Err(msg) => {
|
||||||
return Err(msg);
|
return Err(msg);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let struct_end_event = XmlEvent::end_element();
|
||||||
|
let _ret = writer.write(struct_end_event);
|
||||||
}),
|
}),
|
||||||
Some(FieldType::FieldTypeVec{data_type}) => {
|
Some(FieldType::FieldTypeVec{data_type}) => {
|
||||||
let dt = Box::into_raw(data_type);
|
let dt = Box::into_raw(data_type);
|
||||||
@ -135,6 +143,10 @@ pub fn serialize(data_struct: &DataStruct, name: &Ident, root: &String, namespac
|
|||||||
},
|
},
|
||||||
Some(&FieldType::FieldTypeStruct{..}) => {
|
Some(&FieldType::FieldTypeStruct{..}) => {
|
||||||
Some(quote!{
|
Some(quote!{
|
||||||
|
|
||||||
|
let start_event = XmlEvent::start_element(#label_name);
|
||||||
|
let _ret = writer.write(start_event);
|
||||||
|
|
||||||
for item in &self.#label {
|
for item in &self.#label {
|
||||||
writer.set_skip_start_end(false);
|
writer.set_skip_start_end(false);
|
||||||
match item.serialize(writer) {
|
match item.serialize(writer) {
|
||||||
@ -144,6 +156,8 @@ pub fn serialize(data_struct: &DataStruct, name: &Ident, root: &String, namespac
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
let end_event = XmlEvent::end_element();
|
||||||
|
let _ret = writer.write(end_event);
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
Some(&FieldType::FieldTypeVec{..}) => {unimplemented!();},
|
Some(&FieldType::FieldTypeVec{..}) => {unimplemented!();},
|
||||||
@ -164,15 +178,15 @@ pub fn serialize(data_struct: &DataStruct, name: &Ident, root: &String, namespac
|
|||||||
#[allow(unused_variables)]
|
#[allow(unused_variables)]
|
||||||
fn serialize<W: Write>(&self, writer: &mut yaserde::ser::Serializer<W>) -> Result<(), String> {
|
fn serialize<W: Write>(&self, writer: &mut yaserde::ser::Serializer<W>) -> Result<(), String> {
|
||||||
error!("Struct: start to expand {:?}", #root);
|
error!("Struct: start to expand {:?}", #root);
|
||||||
|
let skip = writer.skip_start_end();
|
||||||
if !writer.skip_start_end() {
|
if !skip {
|
||||||
let struct_start_event = XmlEvent::start_element(#root)#build_attributes#add_namespaces;
|
let struct_start_event = XmlEvent::start_element(#root)#build_attributes#add_namespaces;
|
||||||
let _ret = writer.write(struct_start_event);
|
let _ret = writer.write(struct_start_event);
|
||||||
}
|
}
|
||||||
|
|
||||||
#struct_inspector
|
#struct_inspector
|
||||||
|
|
||||||
if !writer.skip_start_end() {
|
if !skip {
|
||||||
let struct_end_event = XmlEvent::end_element();
|
let struct_end_event = XmlEvent::end_element();
|
||||||
let _ret = writer.write(struct_end_event);
|
let _ret = writer.write(struct_end_event);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user