format code
This commit is contained in:
parent
dd5ca6df6b
commit
29e6736d8d
@ -12,7 +12,10 @@ pub fn to_string<T: YaSerialize>(model: &T) -> Result<String, String> {
|
||||
Ok(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 cursor = serialize_with_writer(model, buf)?;
|
||||
let data = str::from_utf8(cursor.get_ref()).expect("Found invalid UTF-8");
|
||||
@ -104,5 +107,5 @@ impl<'de, W: Write> Serializer<W> {
|
||||
pub struct Config {
|
||||
perform_indent: bool,
|
||||
write_document_declaration: bool,
|
||||
indent_string: Option<String>
|
||||
indent_string: Option<String>,
|
||||
}
|
||||
|
||||
@ -23,7 +23,7 @@ fn de_struct_namespace() {
|
||||
root = "book",
|
||||
prefix = "ns",
|
||||
namespace = "ns: http://www.sample.com/ns/domain",
|
||||
namespace = "ns2: http://www.sample.com/ns/domain_2",
|
||||
namespace = "ns2: http://www.sample.com/ns/domain_2"
|
||||
)]
|
||||
pub struct Book {
|
||||
#[yaserde(prefix = "ns")]
|
||||
@ -83,7 +83,10 @@ fn de_struct_namespace() {
|
||||
<ns:title>Little prince</ns:title>
|
||||
</ns:book>"#;
|
||||
let loaded: Result<Book, String> = from_str(content);
|
||||
assert_eq!(loaded, Err("bad namespace for book, found http://www.sample.com/ns/domain2".to_string()));
|
||||
assert_eq!(
|
||||
loaded,
|
||||
Err("bad namespace for book, found http://www.sample.com/ns/domain2".to_string())
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
@ -36,7 +36,8 @@ fn se_default_field_string() {
|
||||
},
|
||||
content
|
||||
);
|
||||
let content = "<?xml version=\"1.0\" encoding=\"utf-8\"?><base><background>my_value</background></base>";
|
||||
let content =
|
||||
"<?xml version=\"1.0\" encoding=\"utf-8\"?><base><background>my_value</background></base>";
|
||||
convert_and_validate!(
|
||||
XmlStruct {
|
||||
background: "my_value".to_string(),
|
||||
@ -61,13 +62,9 @@ fn se_default_field_boolean() {
|
||||
let content = "<?xml version=\"1.0\" encoding=\"utf-8\"?><base />";
|
||||
convert_and_validate!(XmlStruct { background: true }, content);
|
||||
|
||||
let content = "<?xml version=\"1.0\" encoding=\"utf-8\"?><base><background>false</background></base>";
|
||||
convert_and_validate!(
|
||||
XmlStruct {
|
||||
background: false,
|
||||
},
|
||||
content
|
||||
);
|
||||
let content =
|
||||
"<?xml version=\"1.0\" encoding=\"utf-8\"?><base><background>false</background></base>";
|
||||
convert_and_validate!(XmlStruct { background: false }, content);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
|
||||
use proc_macro2::{Span, TokenStream};
|
||||
use syn::Ident;
|
||||
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
use attribute::*;
|
||||
use de::build_default_value::build_default_value;
|
||||
use field_type::*;
|
||||
use proc_macro2::{Span, TokenStream};
|
||||
use quote::TokenStreamExt;
|
||||
@ -6,7 +7,6 @@ use std::collections::BTreeMap;
|
||||
use syn::DataEnum;
|
||||
use syn::Fields;
|
||||
use syn::Ident;
|
||||
use de::build_default_value::build_default_value;
|
||||
|
||||
pub fn parse(
|
||||
data_enum: &DataEnum,
|
||||
@ -28,42 +28,72 @@ pub fn parse(
|
||||
let field_attrs = YaSerdeAttribute::parse(&field.attrs);
|
||||
|
||||
match get_field_type(field) {
|
||||
Some(FieldType::FieldTypeString) => {
|
||||
build_default_value(field_label, "e! {String}, "e! {"".to_string()}, &field_attrs.default)
|
||||
}
|
||||
Some(FieldType::FieldTypeBool) => {
|
||||
build_default_value(field_label, "e! {bool}, "e! {false}, &field_attrs.default)
|
||||
}
|
||||
Some(FieldType::FieldTypeString) => build_default_value(
|
||||
field_label,
|
||||
"e! {String},
|
||||
"e! {"".to_string()},
|
||||
&field_attrs.default,
|
||||
),
|
||||
Some(FieldType::FieldTypeBool) => build_default_value(
|
||||
field_label,
|
||||
"e! {bool},
|
||||
"e! {false},
|
||||
&field_attrs.default,
|
||||
),
|
||||
Some(FieldType::FieldTypeI8) => {
|
||||
build_default_value(field_label, "e! {i8}, "e! {0}, &field_attrs.default)
|
||||
}
|
||||
Some(FieldType::FieldTypeU8) => {
|
||||
build_default_value(field_label, "e! {u8}, "e! {0}, &field_attrs.default)
|
||||
}
|
||||
Some(FieldType::FieldTypeI16) => {
|
||||
build_default_value(field_label, "e! {i16}, "e! {0}, &field_attrs.default)
|
||||
}
|
||||
Some(FieldType::FieldTypeU16) => {
|
||||
build_default_value(field_label, "e! {u16}, "e! {0}, &field_attrs.default)
|
||||
}
|
||||
Some(FieldType::FieldTypeI32) => {
|
||||
build_default_value(field_label, "e! {i32}, "e! {0}, &field_attrs.default)
|
||||
}
|
||||
Some(FieldType::FieldTypeU32) => {
|
||||
build_default_value(field_label, "e! {u32}, "e! {0}, &field_attrs.default)
|
||||
}
|
||||
Some(FieldType::FieldTypeI64) => {
|
||||
build_default_value(field_label, "e! {i64}, "e! {0}, &field_attrs.default)
|
||||
}
|
||||
Some(FieldType::FieldTypeU64) => {
|
||||
build_default_value(field_label, "e! {u64}, "e! {0}, &field_attrs.default)
|
||||
}
|
||||
Some(FieldType::FieldTypeF32) => {
|
||||
build_default_value(field_label, "e! {f32}, "e! {0}, &field_attrs.default)
|
||||
}
|
||||
Some(FieldType::FieldTypeF64) => {
|
||||
build_default_value(field_label, "e! {f64}, "e! {0}, &field_attrs.default)
|
||||
}
|
||||
Some(FieldType::FieldTypeI16) => build_default_value(
|
||||
field_label,
|
||||
"e! {i16},
|
||||
"e! {0},
|
||||
&field_attrs.default,
|
||||
),
|
||||
Some(FieldType::FieldTypeU16) => build_default_value(
|
||||
field_label,
|
||||
"e! {u16},
|
||||
"e! {0},
|
||||
&field_attrs.default,
|
||||
),
|
||||
Some(FieldType::FieldTypeI32) => build_default_value(
|
||||
field_label,
|
||||
"e! {i32},
|
||||
"e! {0},
|
||||
&field_attrs.default,
|
||||
),
|
||||
Some(FieldType::FieldTypeU32) => build_default_value(
|
||||
field_label,
|
||||
"e! {u32},
|
||||
"e! {0},
|
||||
&field_attrs.default,
|
||||
),
|
||||
Some(FieldType::FieldTypeI64) => build_default_value(
|
||||
field_label,
|
||||
"e! {i64},
|
||||
"e! {0},
|
||||
&field_attrs.default,
|
||||
),
|
||||
Some(FieldType::FieldTypeU64) => build_default_value(
|
||||
field_label,
|
||||
"e! {u64},
|
||||
"e! {0},
|
||||
&field_attrs.default,
|
||||
),
|
||||
Some(FieldType::FieldTypeF32) => build_default_value(
|
||||
field_label,
|
||||
"e! {f32},
|
||||
"e! {0},
|
||||
&field_attrs.default,
|
||||
),
|
||||
Some(FieldType::FieldTypeF64) => build_default_value(
|
||||
field_label,
|
||||
"e! {f64},
|
||||
"e! {0},
|
||||
&field_attrs.default,
|
||||
),
|
||||
Some(FieldType::FieldTypeStruct { struct_name }) => build_default_value(
|
||||
field_label,
|
||||
"e! {#struct_name},
|
||||
@ -88,42 +118,78 @@ pub fn parse(
|
||||
Some(FieldType::FieldTypeVec { data_type }) => {
|
||||
let dt = Box::into_raw(data_type);
|
||||
match unsafe { dt.as_ref() } {
|
||||
Some(&FieldType::FieldTypeString) => {
|
||||
build_default_value(field_label, "e! {Vec<String>}, "e! {vec![]}, &field_attrs.default)
|
||||
}
|
||||
Some(&FieldType::FieldTypeBool) => {
|
||||
build_default_value(field_label, "e! {Vec<bool>}, "e! {vec![]}, &field_attrs.default)
|
||||
}
|
||||
Some(&FieldType::FieldTypeI8) => {
|
||||
build_default_value(field_label, "e! {Vec<i8>}, "e! {vec![]}, &field_attrs.default)
|
||||
}
|
||||
Some(&FieldType::FieldTypeU8) => {
|
||||
build_default_value(field_label, "e! {Vec<u8>}, "e! {vec![]}, &field_attrs.default)
|
||||
}
|
||||
Some(&FieldType::FieldTypeI16) => {
|
||||
build_default_value(field_label, "e! {Vec<i16>}, "e! {vec![]}, &field_attrs.default)
|
||||
}
|
||||
Some(&FieldType::FieldTypeU16) => {
|
||||
build_default_value(field_label, "e! {Vec<u16>}, "e! {vec![]}, &field_attrs.default)
|
||||
}
|
||||
Some(&FieldType::FieldTypeI32) => {
|
||||
build_default_value(field_label, "e! {Vec<i32>}, "e! {vec![]}, &field_attrs.default)
|
||||
}
|
||||
Some(&FieldType::FieldTypeU32) => {
|
||||
build_default_value(field_label, "e! {Vec<u32>}, "e! {vec![]}, &field_attrs.default)
|
||||
}
|
||||
Some(&FieldType::FieldTypeI64) => {
|
||||
build_default_value(field_label, "e! {Vec<i64>}, "e! {vec![]}, &field_attrs.default)
|
||||
}
|
||||
Some(&FieldType::FieldTypeU64) => {
|
||||
build_default_value(field_label, "e! {Vec<u64>}, "e! {vec![]}, &field_attrs.default)
|
||||
}
|
||||
Some(&FieldType::FieldTypeF32) => {
|
||||
build_default_value(field_label, "e! {Vec<f32>}, "e! {vec![]}, &field_attrs.default)
|
||||
}
|
||||
Some(&FieldType::FieldTypeF64) => {
|
||||
build_default_value(field_label, "e! {Vec<f64>}, "e! {vec![]}, &field_attrs.default)
|
||||
}
|
||||
Some(&FieldType::FieldTypeString) => build_default_value(
|
||||
field_label,
|
||||
"e! {Vec<String>},
|
||||
"e! {vec![]},
|
||||
&field_attrs.default,
|
||||
),
|
||||
Some(&FieldType::FieldTypeBool) => build_default_value(
|
||||
field_label,
|
||||
"e! {Vec<bool>},
|
||||
"e! {vec![]},
|
||||
&field_attrs.default,
|
||||
),
|
||||
Some(&FieldType::FieldTypeI8) => build_default_value(
|
||||
field_label,
|
||||
"e! {Vec<i8>},
|
||||
"e! {vec![]},
|
||||
&field_attrs.default,
|
||||
),
|
||||
Some(&FieldType::FieldTypeU8) => build_default_value(
|
||||
field_label,
|
||||
"e! {Vec<u8>},
|
||||
"e! {vec![]},
|
||||
&field_attrs.default,
|
||||
),
|
||||
Some(&FieldType::FieldTypeI16) => build_default_value(
|
||||
field_label,
|
||||
"e! {Vec<i16>},
|
||||
"e! {vec![]},
|
||||
&field_attrs.default,
|
||||
),
|
||||
Some(&FieldType::FieldTypeU16) => build_default_value(
|
||||
field_label,
|
||||
"e! {Vec<u16>},
|
||||
"e! {vec![]},
|
||||
&field_attrs.default,
|
||||
),
|
||||
Some(&FieldType::FieldTypeI32) => build_default_value(
|
||||
field_label,
|
||||
"e! {Vec<i32>},
|
||||
"e! {vec![]},
|
||||
&field_attrs.default,
|
||||
),
|
||||
Some(&FieldType::FieldTypeU32) => build_default_value(
|
||||
field_label,
|
||||
"e! {Vec<u32>},
|
||||
"e! {vec![]},
|
||||
&field_attrs.default,
|
||||
),
|
||||
Some(&FieldType::FieldTypeI64) => build_default_value(
|
||||
field_label,
|
||||
"e! {Vec<i64>},
|
||||
"e! {vec![]},
|
||||
&field_attrs.default,
|
||||
),
|
||||
Some(&FieldType::FieldTypeU64) => build_default_value(
|
||||
field_label,
|
||||
"e! {Vec<u64>},
|
||||
"e! {vec![]},
|
||||
&field_attrs.default,
|
||||
),
|
||||
Some(&FieldType::FieldTypeF32) => build_default_value(
|
||||
field_label,
|
||||
"e! {Vec<f32>},
|
||||
"e! {vec![]},
|
||||
&field_attrs.default,
|
||||
),
|
||||
Some(&FieldType::FieldTypeF64) => build_default_value(
|
||||
field_label,
|
||||
"e! {Vec<f64>},
|
||||
"e! {vec![]},
|
||||
&field_attrs.default,
|
||||
),
|
||||
Some(&FieldType::FieldTypeStruct { ref struct_name }) => build_default_value(
|
||||
field_label,
|
||||
"e! {Vec<#struct_name>},
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
use attribute::*;
|
||||
use de::build_default_value::build_default_value;
|
||||
use field_type::*;
|
||||
use proc_macro2::{Span, TokenStream};
|
||||
use quote::TokenStreamExt;
|
||||
use std::collections::BTreeMap;
|
||||
use syn::DataStruct;
|
||||
use syn::Ident;
|
||||
use de::build_default_value::build_default_value;
|
||||
|
||||
pub fn parse(
|
||||
data_struct: &DataStruct,
|
||||
@ -14,7 +14,6 @@ pub fn parse(
|
||||
prefix: &Option<String>,
|
||||
namespaces: &BTreeMap<String, String>,
|
||||
) -> TokenStream {
|
||||
|
||||
let namespaces_matches: TokenStream = namespaces
|
||||
.iter()
|
||||
.map(|(p, ns)| {
|
||||
@ -1361,7 +1360,6 @@ fn build_call_visitor(
|
||||
prefix: &Option<String>,
|
||||
namespaces: &BTreeMap<String, String>,
|
||||
) -> Option<TokenStream> {
|
||||
|
||||
let namespaces_matches: TokenStream = namespaces
|
||||
.iter()
|
||||
.map(|(p, ns)| {
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
|
||||
pub mod build_default_value;
|
||||
pub mod expand_enum;
|
||||
pub mod expand_struct;
|
||||
@ -17,9 +16,13 @@ pub fn expand_derive_deserialize(ast: &syn::DeriveInput) -> Result<TokenStream,
|
||||
let root = root_attrs.clone().root.unwrap_or_else(|| name.to_string());
|
||||
|
||||
let impl_block = match *data {
|
||||
syn::Data::Struct(ref data_struct) => {
|
||||
expand_struct::parse(data_struct, name, &root, &root_attrs.prefix, &root_attrs.namespaces)
|
||||
}
|
||||
syn::Data::Struct(ref data_struct) => expand_struct::parse(
|
||||
data_struct,
|
||||
name,
|
||||
&root,
|
||||
&root_attrs.prefix,
|
||||
&root_attrs.namespaces,
|
||||
),
|
||||
syn::Data::Enum(ref data_enum) => {
|
||||
expand_enum::parse(data_enum, name, &root, &root_attrs.namespaces)
|
||||
}
|
||||
|
||||
@ -1,11 +1,6 @@
|
||||
|
||||
use proc_macro2::{Ident, Span, TokenStream};
|
||||
|
||||
|
||||
pub fn enclose_formatted_characters(
|
||||
label: &Ident,
|
||||
label_name: String
|
||||
) -> TokenStream {
|
||||
pub fn enclose_formatted_characters(label: &Ident, label_name: String) -> TokenStream {
|
||||
quote! {
|
||||
let start_event = XmlEvent::start_element(#label_name);
|
||||
let _ret = writer.write(start_event);
|
||||
@ -19,10 +14,7 @@ pub fn enclose_formatted_characters(
|
||||
}
|
||||
}
|
||||
|
||||
pub fn enclose_formatted_characters_for_value(
|
||||
label: &Ident,
|
||||
label_name: String
|
||||
) -> TokenStream {
|
||||
pub fn enclose_formatted_characters_for_value(label: &Ident, label_name: String) -> TokenStream {
|
||||
quote! {
|
||||
let start_event = XmlEvent::start_element(#label_name);
|
||||
let _ret = writer.write(start_event);
|
||||
@ -36,10 +28,7 @@ pub fn enclose_formatted_characters_for_value(
|
||||
}
|
||||
}
|
||||
|
||||
pub fn enclose_characters(
|
||||
label: &Option<Ident>,
|
||||
label_name: String
|
||||
) -> TokenStream {
|
||||
pub fn enclose_characters(label: &Option<Ident>, label_name: String) -> TokenStream {
|
||||
quote! {
|
||||
let start_event = XmlEvent::start_element(#label_name);
|
||||
let _ret = writer.write(start_event);
|
||||
@ -57,7 +46,7 @@ pub fn serialize_element(
|
||||
label: &Option<Ident>,
|
||||
label_name: String,
|
||||
default: &Option<String>,
|
||||
) -> Option<TokenStream> {
|
||||
) -> Option<TokenStream> {
|
||||
let inner = enclose_characters(label, label_name);
|
||||
|
||||
if let Some(ref d) = default {
|
||||
|
||||
@ -79,7 +79,7 @@ pub fn serialize(
|
||||
});
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
Some(FieldType::FieldTypeOption { data_type }) => {
|
||||
let dt = Box::into_raw(data_type);
|
||||
match unsafe { dt.as_ref() } {
|
||||
@ -108,7 +108,7 @@ pub fn serialize(
|
||||
};
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
Some(&FieldType::FieldTypeBool)
|
||||
| Some(&FieldType::FieldTypeI8)
|
||||
| Some(&FieldType::FieldTypeU8)
|
||||
@ -160,7 +160,7 @@ pub fn serialize(
|
||||
};
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
Some(&FieldType::FieldTypeVec { .. }) => {
|
||||
let item_ident = Ident::new("yas_item", Span::call_site());
|
||||
let inner = enclose_formatted_characters(&item_ident, label_name);
|
||||
@ -184,7 +184,7 @@ pub fn serialize(
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
_ => unimplemented!(),
|
||||
}
|
||||
}
|
||||
@ -228,7 +228,7 @@ pub fn serialize(
|
||||
});
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
_ => None,
|
||||
}
|
||||
})
|
||||
@ -293,8 +293,9 @@ pub fn serialize(
|
||||
| Some(FieldType::FieldTypeI64)
|
||||
| Some(FieldType::FieldTypeU64)
|
||||
| Some(FieldType::FieldTypeF32)
|
||||
| Some(FieldType::FieldTypeF64) =>
|
||||
serialize_element(label, label_name, &field_attrs.default),
|
||||
| Some(FieldType::FieldTypeF64) => {
|
||||
serialize_element(label, label_name, &field_attrs.default)
|
||||
}
|
||||
Some(FieldType::FieldTypeOption { data_type }) => {
|
||||
let dt = Box::into_raw(data_type);
|
||||
match unsafe { dt.as_ref() } {
|
||||
@ -330,7 +331,7 @@ pub fn serialize(
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
Some(&FieldType::FieldTypeVec { .. }) => {
|
||||
let item_ident = Ident::new("yas_item", Span::call_site());
|
||||
let inner = enclose_formatted_characters_for_value(&item_ident, label_name);
|
||||
@ -356,7 +357,7 @@ pub fn serialize(
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
Some(&FieldType::FieldTypeStruct { .. }) => Some(quote! {
|
||||
if let Some(ref item) = &self.#label {
|
||||
writer.set_start_event_name(Some(#label_name.to_string()));
|
||||
@ -416,7 +417,7 @@ pub fn serialize(
|
||||
#inner
|
||||
}
|
||||
})
|
||||
},
|
||||
}
|
||||
Some(&FieldType::FieldTypeBool)
|
||||
| Some(&FieldType::FieldTypeI8)
|
||||
| Some(&FieldType::FieldTypeU8)
|
||||
@ -436,7 +437,7 @@ pub fn serialize(
|
||||
#inner
|
||||
}
|
||||
})
|
||||
},
|
||||
}
|
||||
Some(&FieldType::FieldTypeOption { .. }) => Some(quote! {
|
||||
for item in &self.#label {
|
||||
if let Some(value) = item {
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
|
||||
pub mod element;
|
||||
pub mod expand_enum;
|
||||
pub mod expand_struct;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user