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