Merge pull request #88 from marcelbuesing/master
Enforce std String in macros to avoid collisions
This commit is contained in:
commit
c25d8d420f
@ -19,12 +19,13 @@ pub mod ser;
|
|||||||
|
|
||||||
/// A **data structure** that can be deserialized from any data format supported by YaSerDe.
|
/// A **data structure** that can be deserialized from any data format supported by YaSerDe.
|
||||||
pub trait YaDeserialize: Sized {
|
pub trait YaDeserialize: Sized {
|
||||||
fn deserialize<R: Read>(reader: &mut de::Deserializer<R>) -> Result<Self, String>;
|
fn deserialize<R: Read>(reader: &mut de::Deserializer<R>) -> Result<Self, std::string::String>;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A **data structure** that can be serialized into any data format supported by YaSerDe.
|
/// A **data structure** that can be serialized into any data format supported by YaSerDe.
|
||||||
pub trait YaSerialize: Sized {
|
pub trait YaSerialize: Sized {
|
||||||
fn serialize<W: Write>(&self, writer: &mut ser::Serializer<W>) -> Result<(), String>;
|
fn serialize<W: Write>(&self, writer: &mut ser::Serializer<W>)
|
||||||
|
-> Result<(), std::string::String>;
|
||||||
|
|
||||||
fn serialize_attributes(
|
fn serialize_attributes(
|
||||||
&self,
|
&self,
|
||||||
@ -35,7 +36,7 @@ pub trait YaSerialize: Sized {
|
|||||||
Vec<xml::attribute::OwnedAttribute>,
|
Vec<xml::attribute::OwnedAttribute>,
|
||||||
xml::namespace::Namespace,
|
xml::namespace::Namespace,
|
||||||
),
|
),
|
||||||
String,
|
std::string::String,
|
||||||
>;
|
>;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,51 +45,51 @@ pub trait Visitor<'de>: Sized {
|
|||||||
/// The value produced by this visitor.
|
/// The value produced by this visitor.
|
||||||
type Value;
|
type Value;
|
||||||
|
|
||||||
fn visit_bool(self, v: &str) -> Result<Self::Value, String> {
|
fn visit_bool(self, v: &str) -> Result<Self::Value, std::string::String> {
|
||||||
Err(format!("Unexpected bool {:?}", v))
|
Err(format!("Unexpected bool {:?}", v))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_i8(self, v: &str) -> Result<Self::Value, String> {
|
fn visit_i8(self, v: &str) -> Result<Self::Value, std::string::String> {
|
||||||
Err(format!("Unexpected i8 {:?}", v))
|
Err(format!("Unexpected i8 {:?}", v))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_u8(self, v: &str) -> Result<Self::Value, String> {
|
fn visit_u8(self, v: &str) -> Result<Self::Value, std::string::String> {
|
||||||
Err(format!("Unexpected u8 {:?}", v))
|
Err(format!("Unexpected u8 {:?}", v))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_i16(self, v: &str) -> Result<Self::Value, String> {
|
fn visit_i16(self, v: &str) -> Result<Self::Value, std::string::String> {
|
||||||
Err(format!("Unexpected i16 {:?}", v))
|
Err(format!("Unexpected i16 {:?}", v))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_u16(self, v: &str) -> Result<Self::Value, String> {
|
fn visit_u16(self, v: &str) -> Result<Self::Value, std::string::String> {
|
||||||
Err(format!("Unexpected u16 {:?}", v))
|
Err(format!("Unexpected u16 {:?}", v))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_i32(self, v: &str) -> Result<Self::Value, String> {
|
fn visit_i32(self, v: &str) -> Result<Self::Value, std::string::String> {
|
||||||
Err(format!("Unexpected i32 {:?}", v))
|
Err(format!("Unexpected i32 {:?}", v))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_u32(self, v: &str) -> Result<Self::Value, String> {
|
fn visit_u32(self, v: &str) -> Result<Self::Value, std::string::String> {
|
||||||
Err(format!("Unexpected u32 {:?}", v))
|
Err(format!("Unexpected u32 {:?}", v))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_i64(self, v: &str) -> Result<Self::Value, String> {
|
fn visit_i64(self, v: &str) -> Result<Self::Value, std::string::String> {
|
||||||
Err(format!("Unexpected i64 {:?}", v))
|
Err(format!("Unexpected i64 {:?}", v))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_u64(self, v: &str) -> Result<Self::Value, String> {
|
fn visit_u64(self, v: &str) -> Result<Self::Value, std::string::String> {
|
||||||
Err(format!("Unexpected u64 {:?}", v))
|
Err(format!("Unexpected u64 {:?}", v))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_f32(self, v: &str) -> Result<Self::Value, String> {
|
fn visit_f32(self, v: &str) -> Result<Self::Value, std::string::String> {
|
||||||
Err(format!("Unexpected f32 {:?}", v))
|
Err(format!("Unexpected f32 {:?}", v))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_f64(self, v: &str) -> Result<Self::Value, String> {
|
fn visit_f64(self, v: &str) -> Result<Self::Value, std::string::String> {
|
||||||
Err(format!("Unexpected f64 {:?}", v))
|
Err(format!("Unexpected f64 {:?}", v))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_str(self, v: &str) -> Result<Self::Value, String> {
|
fn visit_str(self, v: &str) -> Result<Self::Value, std::string::String> {
|
||||||
Err(format!("Unexpected str {:?}", v))
|
Err(format!("Unexpected str {:?}", v))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -96,7 +97,10 @@ pub trait Visitor<'de>: Sized {
|
|||||||
macro_rules! serialize_type {
|
macro_rules! serialize_type {
|
||||||
($type:ty) => {
|
($type:ty) => {
|
||||||
impl YaSerialize for $type {
|
impl YaSerialize for $type {
|
||||||
fn serialize<W: Write>(&self, writer: &mut ser::Serializer<W>) -> Result<(), String> {
|
fn serialize<W: Write>(
|
||||||
|
&self,
|
||||||
|
writer: &mut ser::Serializer<W>,
|
||||||
|
) -> Result<(), std::string::String> {
|
||||||
let content = format!("{}", self);
|
let content = format!("{}", self);
|
||||||
let event = XmlEvent::characters(&content);
|
let event = XmlEvent::characters(&content);
|
||||||
let _ret = writer.write(event);
|
let _ret = writer.write(event);
|
||||||
@ -112,7 +116,7 @@ macro_rules! serialize_type {
|
|||||||
Vec<xml::attribute::OwnedAttribute>,
|
Vec<xml::attribute::OwnedAttribute>,
|
||||||
xml::namespace::Namespace,
|
xml::namespace::Namespace,
|
||||||
),
|
),
|
||||||
String,
|
std::string::String,
|
||||||
> {
|
> {
|
||||||
Ok((attributes, namespace))
|
Ok((attributes, namespace))
|
||||||
}
|
}
|
||||||
@ -178,9 +182,9 @@ mod testing {
|
|||||||
let model = Data { item: $value };
|
let model = Data { item: $value };
|
||||||
|
|
||||||
let content = if let Some(str_value) = $content {
|
let content = if let Some(str_value) = $content {
|
||||||
String::from("<data><item>") + str_value + "</item></data>"
|
std::string::String::from("<data><item>") + str_value + "</item></data>"
|
||||||
} else {
|
} else {
|
||||||
String::from("<data />")
|
std::string::String::from("<data />")
|
||||||
};
|
};
|
||||||
|
|
||||||
serialize_and_validate!(model, content);
|
serialize_and_validate!(model, content);
|
||||||
@ -214,7 +218,7 @@ mod testing {
|
|||||||
macro_rules! deserialize_and_validate {
|
macro_rules! deserialize_and_validate {
|
||||||
($content: expr, $model: expr, $struct: tt) => {
|
($content: expr, $model: expr, $struct: tt) => {
|
||||||
log::debug!("deserialize_and_validate @ {}:{}", file!(), line!());
|
log::debug!("deserialize_and_validate @ {}:{}", file!(), line!());
|
||||||
let loaded: Result<$struct, String> = yaserde::de::from_str($content);
|
let loaded: Result<$struct, std::string::String> = yaserde::de::from_str($content);
|
||||||
assert_eq!(loaded, Ok($model));
|
assert_eq!(loaded, Ok($model));
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -223,16 +227,17 @@ mod testing {
|
|||||||
macro_rules! serialize_and_validate {
|
macro_rules! serialize_and_validate {
|
||||||
($model: expr, $content: expr) => {
|
($model: expr, $content: expr) => {
|
||||||
log::debug!("serialize_and_validate @ {}:{}", file!(), line!());
|
log::debug!("serialize_and_validate @ {}:{}", file!(), line!());
|
||||||
let data: Result<String, String> = yaserde::ser::to_string(&$model);
|
let data: Result<std::string::String, std::string::String> = yaserde::ser::to_string(&$model);
|
||||||
|
|
||||||
let content = String::from(r#"<?xml version="1.0" encoding="utf-8"?>"#) + &$content;
|
let content =
|
||||||
|
std::string::String::from(r#"<?xml version="1.0" encoding="utf-8"?>"#) + &$content;
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
data,
|
data,
|
||||||
Ok(
|
Ok(
|
||||||
String::from(content)
|
std::string::String::from(content)
|
||||||
.split("\n")
|
.split("\n")
|
||||||
.map(|s| s.trim())
|
.map(|s| s.trim())
|
||||||
.collect::<String>()
|
.collect::<std::string::String>()
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -11,14 +11,14 @@ pub fn to_string<T: YaSerialize>(model: &T) -> Result<String, String> {
|
|||||||
let buf = Cursor::new(Vec::new());
|
let buf = Cursor::new(Vec::new());
|
||||||
let cursor = serialize_with_writer(model, buf, &Config::default())?;
|
let cursor = serialize_with_writer(model, buf, &Config::default())?;
|
||||||
let data = str::from_utf8(cursor.get_ref()).expect("Found invalid UTF-8");
|
let data = str::from_utf8(cursor.get_ref()).expect("Found invalid UTF-8");
|
||||||
Ok(String::from(data))
|
Ok(std::string::String::from(data))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn to_string_with_config<T: YaSerialize>(model: &T, config: &Config) -> Result<String, String> {
|
pub fn to_string_with_config<T: YaSerialize>(model: &T, config: &Config) -> Result<String, String> {
|
||||||
let buf = Cursor::new(Vec::new());
|
let buf = Cursor::new(Vec::new());
|
||||||
let cursor = serialize_with_writer(model, buf, config)?;
|
let cursor = serialize_with_writer(model, buf, config)?;
|
||||||
let data = str::from_utf8(cursor.get_ref()).expect("Found invalid UTF-8");
|
let data = str::from_utf8(cursor.get_ref()).expect("Found invalid UTF-8");
|
||||||
Ok(String::from(data))
|
Ok(std::string::String::from(data))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn serialize_with_writer<W: Write, T: YaSerialize>(
|
pub fn serialize_with_writer<W: Write, T: YaSerialize>(
|
||||||
@ -37,7 +37,7 @@ pub fn to_string_content<T: YaSerialize>(model: &T) -> Result<String, String> {
|
|||||||
let buf = Cursor::new(Vec::new());
|
let buf = Cursor::new(Vec::new());
|
||||||
let cursor = serialize_with_writer_content(model, buf)?;
|
let cursor = serialize_with_writer_content(model, buf)?;
|
||||||
let data = str::from_utf8(cursor.get_ref()).expect("Found invalid UTF-8");
|
let data = str::from_utf8(cursor.get_ref()).expect("Found invalid UTF-8");
|
||||||
Ok(String::from(data))
|
Ok(std::string::String::from(data))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn serialize_with_writer_content<W: Write, T: YaSerialize>(
|
pub fn serialize_with_writer_content<W: Write, T: YaSerialize>(
|
||||||
|
|||||||
@ -15,7 +15,7 @@ fn init() {
|
|||||||
macro_rules! convert_and_validate {
|
macro_rules! convert_and_validate {
|
||||||
($content: expr, $struct: tt, $model: expr) => {
|
($content: expr, $struct: tt, $model: expr) => {
|
||||||
debug!("convert_and_validate @ {}:{}", file!(), line!());
|
debug!("convert_and_validate @ {}:{}", file!(), line!());
|
||||||
let loaded: Result<$struct, String> = from_str($content);
|
let loaded: Result<$struct, std::string::String> = from_str($content);
|
||||||
assert_eq!(loaded, Ok($model));
|
assert_eq!(loaded, Ok($model));
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -785,7 +785,9 @@ fn de_custom() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl YaDeserialize for Day {
|
impl YaDeserialize for Day {
|
||||||
fn deserialize<R: Read>(reader: &mut yaserde::de::Deserializer<R>) -> Result<Self, String> {
|
fn deserialize<R: Read>(
|
||||||
|
reader: &mut yaserde::de::Deserializer<R>,
|
||||||
|
) -> Result<Self, std::string::String> {
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
if let xml::reader::XmlEvent::StartElement { name, .. } = reader.peek()?.to_owned() {
|
if let xml::reader::XmlEvent::StartElement { name, .. } = reader.peek()?.to_owned() {
|
||||||
|
|||||||
@ -254,7 +254,7 @@ impl From<&syn::PathSegment> for Field {
|
|||||||
impl Into<proc_macro2::TokenStream> for Field {
|
impl Into<proc_macro2::TokenStream> for Field {
|
||||||
fn into(self) -> proc_macro2::TokenStream {
|
fn into(self) -> proc_macro2::TokenStream {
|
||||||
match self {
|
match self {
|
||||||
Field::FieldString => quote! {String},
|
Field::FieldString => quote! {std::string::String},
|
||||||
Field::FieldBool => quote! {bool},
|
Field::FieldBool => quote! {bool},
|
||||||
Field::FieldI8 => quote! {i8},
|
Field::FieldI8 => quote! {i8},
|
||||||
Field::FieldU8 => quote! {u8},
|
Field::FieldU8 => quote! {u8},
|
||||||
@ -272,7 +272,7 @@ impl Into<proc_macro2::TokenStream> for Field {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Into<String> for &Field {
|
impl Into<String> for &Field {
|
||||||
fn into(self) -> String {
|
fn into(self) -> std::string::String {
|
||||||
match self {
|
match self {
|
||||||
Field::FieldString => "str".to_string(),
|
Field::FieldString => "str".to_string(),
|
||||||
Field::FieldBool => "bool".to_string(),
|
Field::FieldBool => "bool".to_string(),
|
||||||
@ -293,7 +293,7 @@ impl Into<String> for &Field {
|
|||||||
|
|
||||||
impl fmt::Display for Field {
|
impl fmt::Display for Field {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
let string_representation: String = self.into();
|
let string_representation: std::string::String = self.into();
|
||||||
write!(f, "{}", string_representation)
|
write!(f, "{}", string_representation)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -33,12 +33,12 @@ pub fn parse(
|
|||||||
|
|
||||||
impl YaDeserialize for #name {
|
impl YaDeserialize for #name {
|
||||||
#[allow(unused_variables)]
|
#[allow(unused_variables)]
|
||||||
fn deserialize<R: Read>(reader: &mut yaserde::de::Deserializer<R>) -> Result<Self, String> {
|
fn deserialize<R: Read>(reader: &mut yaserde::de::Deserializer<R>) -> Result<Self, std::string::String> {
|
||||||
let (named_element, enum_namespace) =
|
let (named_element, enum_namespace) =
|
||||||
if let XmlEvent::StartElement{name, ..} = reader.peek()?.to_owned() {
|
if let XmlEvent::StartElement{name, ..} = reader.peek()?.to_owned() {
|
||||||
(name.local_name.to_owned(), name.namespace.clone())
|
(name.local_name.to_owned(), name.namespace.clone())
|
||||||
} else {
|
} else {
|
||||||
(String::from(#root), None)
|
(std::string::String::from(#root), None)
|
||||||
};
|
};
|
||||||
|
|
||||||
let start_depth = reader.depth();
|
let start_depth = reader.depth();
|
||||||
@ -161,7 +161,7 @@ fn build_unnamed_field_visitors(fields: &syn::FieldsUnnamed) -> TokenStream {
|
|||||||
impl<'de> Visitor<'de> for #visitor_label {
|
impl<'de> Visitor<'de> for #visitor_label {
|
||||||
type Value = #field_type;
|
type Value = #field_type;
|
||||||
|
|
||||||
fn #visitor(self, v: &str) -> Result<Self::Value, String> {
|
fn #visitor(self, v: &str) -> Result<Self::Value, std::string::String> {
|
||||||
#fn_body
|
#fn_body
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -181,7 +181,7 @@ fn build_unnamed_field_visitors(fields: &syn::FieldsUnnamed) -> TokenStream {
|
|||||||
|
|
||||||
match field.get_type() {
|
match field.get_type() {
|
||||||
Field::FieldStruct { struct_name } => {
|
Field::FieldStruct { struct_name } => {
|
||||||
let struct_id: String = struct_name
|
let struct_id: std::string::String = struct_name
|
||||||
.segments
|
.segments
|
||||||
.iter()
|
.iter()
|
||||||
.map(|s| s.ident.to_string())
|
.map(|s| s.ident.to_string())
|
||||||
@ -192,7 +192,7 @@ fn build_unnamed_field_visitors(fields: &syn::FieldsUnnamed) -> TokenStream {
|
|||||||
"e! { #struct_name },
|
"e! { #struct_name },
|
||||||
"e! {
|
"e! {
|
||||||
let content = "<".to_string() + #struct_id + ">" + v + "</" + #struct_id + ">";
|
let content = "<".to_string() + #struct_id + ">" + v + "</" + #struct_id + ">";
|
||||||
let value : Result<#struct_name, String> = yaserde::de::from_str(&content);
|
let value : Result<#struct_name, std::string::String> = yaserde::de::from_str(&content);
|
||||||
value
|
value
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@ -267,7 +267,7 @@ fn build_unnamed_visitor_calls(
|
|||||||
match enum_value {
|
match enum_value {
|
||||||
Some(ref mut v) => match v {
|
Some(ref mut v) => match v {
|
||||||
#variant_name(ref mut v) => v.push(value),
|
#variant_name(ref mut v) => v.push(value),
|
||||||
_ => return Err(String::from("Got sequence of different types"))
|
_ => return Err(std::string::String::from("Got sequence of different types"))
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
enum_value = Some(#variant_name(vec![value]));
|
enum_value = Some(#variant_name(vec![value]));
|
||||||
|
|||||||
@ -57,7 +57,7 @@ pub fn parse(
|
|||||||
.map(|field| YaSerdeField::new(field.clone()))
|
.map(|field| YaSerdeField::new(field.clone()))
|
||||||
.map(|field| {
|
.map(|field| {
|
||||||
let struct_visitor = |struct_name: syn::Path| {
|
let struct_visitor = |struct_name: syn::Path| {
|
||||||
let struct_id: String = struct_name
|
let struct_id: std::string::String = struct_name
|
||||||
.segments
|
.segments
|
||||||
.iter()
|
.iter()
|
||||||
.map(|s| s.ident.to_string())
|
.map(|s| s.ident.to_string())
|
||||||
@ -71,9 +71,9 @@ pub fn parse(
|
|||||||
impl<'de> Visitor<'de> for #visitor_label {
|
impl<'de> Visitor<'de> for #visitor_label {
|
||||||
type Value = #struct_name;
|
type Value = #struct_name;
|
||||||
|
|
||||||
fn visit_str(self, v: &str) -> Result<Self::Value, String> {
|
fn visit_str(self, v: &str) -> Result<Self::Value, std::string::String> {
|
||||||
let content = "<".to_string() + #struct_id + ">" + v + "</" + #struct_id + ">";
|
let content = "<".to_string() + #struct_id + ">" + v + "</" + #struct_id + ">";
|
||||||
let value : Result<#struct_name, String> = yaserde::de::from_str(&content);
|
let value : Result<#struct_name, std::string::String> = yaserde::de::from_str(&content);
|
||||||
value
|
value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -91,7 +91,7 @@ pub fn parse(
|
|||||||
impl<'de> Visitor<'de> for #visitor_label {
|
impl<'de> Visitor<'de> for #visitor_label {
|
||||||
type Value = #field_type;
|
type Value = #field_type;
|
||||||
|
|
||||||
fn #visitor(self, v: &str) -> Result<Self::Value, String> {
|
fn #visitor(self, v: &str) -> Result<Self::Value, std::string::String> {
|
||||||
Ok(#field_type::from_str(v).unwrap())
|
Ok(#field_type::from_str(v).unwrap())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -315,12 +315,12 @@ pub fn parse(
|
|||||||
|
|
||||||
impl YaDeserialize for #name {
|
impl YaDeserialize for #name {
|
||||||
#[allow(unused_variables)]
|
#[allow(unused_variables)]
|
||||||
fn deserialize<R: Read>(reader: &mut yaserde::de::Deserializer<R>) -> Result<Self, String> {
|
fn deserialize<R: Read>(reader: &mut yaserde::de::Deserializer<R>) -> Result<Self, std::string::String> {
|
||||||
let (named_element, struct_namespace) =
|
let (named_element, struct_namespace) =
|
||||||
if let XmlEvent::StartElement{name, ..} = reader.peek()?.to_owned() {
|
if let XmlEvent::StartElement{name, ..} = reader.peek()?.to_owned() {
|
||||||
(name.local_name.to_owned(), name.namespace.clone())
|
(name.local_name.to_owned(), name.namespace.clone())
|
||||||
} else {
|
} else {
|
||||||
(String::from(#root), None)
|
(std::string::String::from(#root), None)
|
||||||
};
|
};
|
||||||
let start_depth = reader.depth();
|
let start_depth = reader.depth();
|
||||||
debug!("Struct {} @ {}: start to parse {:?}", stringify!(#name), start_depth,
|
debug!("Struct {} @ {}: start to parse {:?}", stringify!(#name), start_depth,
|
||||||
@ -476,7 +476,7 @@ fn build_code_for_unused_xml_events(
|
|||||||
}),
|
}),
|
||||||
Some(quote! {
|
Some(quote! {
|
||||||
if writer.is_some() {
|
if writer.is_some() {
|
||||||
let unused_xml_elements = String::from_utf8(buf).unwrap();
|
let unused_xml_elements = std::string::String::from_utf8(buf).unwrap();
|
||||||
#call_flatten_visitors
|
#call_flatten_visitors
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
|||||||
@ -62,7 +62,7 @@ pub fn serialize(
|
|||||||
| Field::FieldU64
|
| Field::FieldU64
|
||||||
| Field::FieldF32
|
| Field::FieldF32
|
||||||
| Field::FieldF64 => field.ser_wrap_default_attribute(
|
| Field::FieldF64 => field.ser_wrap_default_attribute(
|
||||||
Some(quote!(self.#label.map_or_else(|| String::new(), |v| v.to_string()))),
|
Some(quote!(self.#label.map_or_else(|| std::string::String::new(), |v| v.to_string()))),
|
||||||
quote!({
|
quote!({
|
||||||
if let Some(ref value) = self.#label {
|
if let Some(ref value) = self.#label {
|
||||||
struct_start_event.attr(#label_name, &yaserde_inner)
|
struct_start_event.attr(#label_name, &yaserde_inner)
|
||||||
@ -89,7 +89,7 @@ pub fn serialize(
|
|||||||
Field::FieldStruct { .. } => field.ser_wrap_default_attribute(
|
Field::FieldStruct { .. } => field.ser_wrap_default_attribute(
|
||||||
Some(quote!(self.#label
|
Some(quote!(self.#label
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.map_or_else(|| Ok(String::new()), |v| yaserde::ser::to_string_content(v))?)),
|
.map_or_else(|| Ok(std::string::String::new()), |v| yaserde::ser::to_string_content(v))?)),
|
||||||
quote!({
|
quote!({
|
||||||
if let Some(ref yaserde_struct) = self.#label {
|
if let Some(ref yaserde_struct) = self.#label {
|
||||||
struct_start_event.attr(#label_name, &yaserde_inner)
|
struct_start_event.attr(#label_name, &yaserde_inner)
|
||||||
|
|||||||
@ -19,7 +19,7 @@ pub fn implement_serializer(
|
|||||||
impl YaSerialize for #name {
|
impl YaSerialize for #name {
|
||||||
#[allow(unused_variables)]
|
#[allow(unused_variables)]
|
||||||
fn serialize<W: Write>(&self, writer: &mut yaserde::ser::Serializer<W>)
|
fn serialize<W: Write>(&self, writer: &mut yaserde::ser::Serializer<W>)
|
||||||
-> Result<(), String> {
|
-> Result<(), std::string::String> {
|
||||||
let skip = writer.skip_start_end();
|
let skip = writer.skip_start_end();
|
||||||
|
|
||||||
if !#flatten && !skip {
|
if !#flatten && !skip {
|
||||||
@ -61,7 +61,7 @@ pub fn implement_serializer(
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn serialize_attributes(&self, mut source_attributes: Vec<xml::attribute::OwnedAttribute>, mut source_namespace: xml::namespace::Namespace) -> Result<(Vec<xml::attribute::OwnedAttribute>, xml::namespace::Namespace), String> {
|
fn serialize_attributes(&self, mut source_attributes: Vec<xml::attribute::OwnedAttribute>, mut source_namespace: xml::namespace::Namespace) -> Result<(Vec<xml::attribute::OwnedAttribute>, xml::namespace::Namespace), std::string::String> {
|
||||||
let mut child_attributes : Vec<xml::attribute::OwnedAttribute> = vec![];
|
let mut child_attributes : Vec<xml::attribute::OwnedAttribute> = vec![];
|
||||||
let mut child_attributes_namespace = xml::namespace::Namespace::empty();
|
let mut child_attributes_namespace = xml::namespace::Namespace::empty();
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user