@@ -23,14 +23,14 @@ pub fn serialize(
|
||||
}
|
||||
|
||||
let renamed_label = match field_attrs.rename {
|
||||
Some(value) => Some(Ident::new(&format!("{}", value), Span::call_site())),
|
||||
None => field.ident.clone(),
|
||||
Some(value) => Ident::new(&format!("{}", value), Span::call_site()),
|
||||
None => field.ident.clone().unwrap(),
|
||||
};
|
||||
let label = &field.ident;
|
||||
let label_name = if let Some(prefix) = field_attrs.prefix {
|
||||
prefix + ":" + renamed_label.unwrap().to_string().as_ref()
|
||||
prefix + ":" + renamed_label.to_string().as_ref()
|
||||
} else {
|
||||
renamed_label.unwrap().to_string()
|
||||
renamed_label.to_string()
|
||||
};
|
||||
|
||||
match get_field_type(field) {
|
||||
@@ -93,6 +93,20 @@ pub fn serialize(
|
||||
struct_start_event
|
||||
};
|
||||
}),
|
||||
Some(&FieldType::FieldTypeVec{..}) => {
|
||||
Some(quote!{
|
||||
for item in &self.#label {
|
||||
let start_event = XmlEvent::start_element(#label_name);
|
||||
let _ret = writer.write(start_event);
|
||||
|
||||
let data_event = XmlEvent::characters(item);
|
||||
let _ret = writer.write(data_event);
|
||||
|
||||
let end_event = XmlEvent::end_element();
|
||||
let _ret = writer.write(end_event);
|
||||
}
|
||||
})
|
||||
}
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
@@ -153,14 +167,14 @@ pub fn serialize(
|
||||
}
|
||||
|
||||
let renamed_label = match field_attrs.rename {
|
||||
Some(value) => Some(Ident::new(&format!("{}", value), Span::call_site())),
|
||||
None => field.ident.clone(),
|
||||
Some(value) => Ident::new(&format!("{}", value), Span::call_site()),
|
||||
None => field.ident.clone().unwrap(),
|
||||
};
|
||||
|
||||
let label_name = if let Some(prefix) = field_attrs.prefix {
|
||||
prefix + ":" + renamed_label.unwrap().to_string().as_ref()
|
||||
prefix + ":" + renamed_label.to_string().as_ref()
|
||||
} else {
|
||||
renamed_label.unwrap().to_string()
|
||||
renamed_label.to_string()
|
||||
};
|
||||
|
||||
match get_field_type(field) {
|
||||
@@ -233,18 +247,35 @@ pub fn serialize(
|
||||
let _ret = writer.write(end_event);
|
||||
}
|
||||
}),
|
||||
Some(&FieldType::FieldTypeVec{ .. }) => Some(quote!{
|
||||
if let Some(ref items) = &self.#label {
|
||||
for item in items.iter() {
|
||||
let start_event = XmlEvent::start_element(#label_name);
|
||||
let _ret = writer.write(start_event);
|
||||
|
||||
let value = format!("{}", item);
|
||||
let data_event = XmlEvent::characters(&value);
|
||||
let _ret = writer.write(data_event);
|
||||
|
||||
let end_event = XmlEvent::end_element();
|
||||
let _ret = writer.write(end_event);
|
||||
}
|
||||
}
|
||||
}),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
Some(FieldType::FieldTypeStruct { .. }) => Some(quote!{
|
||||
writer.set_skip_start_end(false);
|
||||
match self.#label.serialize(writer) {
|
||||
Ok(()) => {},
|
||||
Err(msg) => {
|
||||
return Err(msg);
|
||||
},
|
||||
};
|
||||
}),
|
||||
Some(FieldType::FieldTypeStruct { .. }) => {
|
||||
Some(quote!{
|
||||
writer.set_skip_start_end(false);
|
||||
match self.#label.serialize(writer) {
|
||||
Ok(()) => {},
|
||||
Err(msg) => {
|
||||
return Err(msg);
|
||||
},
|
||||
};
|
||||
})
|
||||
},
|
||||
Some(FieldType::FieldTypeVec { data_type }) => {
|
||||
let dt = Box::into_raw(data_type);
|
||||
match unsafe { dt.as_ref() } {
|
||||
@@ -313,7 +344,7 @@ pub fn serialize(
|
||||
unimplemented!();
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
None => None,
|
||||
}
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user