skip serialization if value equals to default
This commit is contained in:
@@ -29,8 +29,7 @@ fn de_default_field_string() {
|
||||
background: String,
|
||||
}
|
||||
|
||||
let content =
|
||||
"<?xml version=\"1.0\" encoding=\"utf-8\"?><base></base>";
|
||||
let content = "<?xml version=\"1.0\" encoding=\"utf-8\"?><base />";
|
||||
convert_and_validate!(
|
||||
content,
|
||||
XmlStruct,
|
||||
@@ -53,15 +52,8 @@ fn de_default_field_boolean() {
|
||||
background: bool,
|
||||
}
|
||||
|
||||
let content =
|
||||
"<?xml version=\"1.0\" encoding=\"utf-8\"?><base></base>";
|
||||
convert_and_validate!(
|
||||
content,
|
||||
XmlStruct,
|
||||
XmlStruct {
|
||||
background: true,
|
||||
}
|
||||
);
|
||||
let content = "<?xml version=\"1.0\" encoding=\"utf-8\"?><base />";
|
||||
convert_and_validate!(content, XmlStruct, XmlStruct { background: true });
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -77,15 +69,8 @@ fn de_default_field_number() {
|
||||
background: u8,
|
||||
}
|
||||
|
||||
let content =
|
||||
"<?xml version=\"1.0\" encoding=\"utf-8\"?><base></base>";
|
||||
convert_and_validate!(
|
||||
content,
|
||||
XmlStruct,
|
||||
XmlStruct {
|
||||
background: 6,
|
||||
}
|
||||
);
|
||||
let content = "<?xml version=\"1.0\" encoding=\"utf-8\"?><base />";
|
||||
convert_and_validate!(content, XmlStruct, XmlStruct { background: 6 });
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -101,8 +86,7 @@ fn de_default_attribute_string() {
|
||||
background: String,
|
||||
}
|
||||
|
||||
let content =
|
||||
"<?xml version=\"1.0\" encoding=\"utf-8\"?><base></base>";
|
||||
let content = "<?xml version=\"1.0\" encoding=\"utf-8\"?><base />";
|
||||
convert_and_validate!(
|
||||
content,
|
||||
XmlStruct,
|
||||
|
||||
@@ -121,22 +121,28 @@ fn de_option() {
|
||||
fn de_option_struct() {
|
||||
#[derive(YaDeserialize, Debug, PartialEq)]
|
||||
struct Test {
|
||||
field: SubTest
|
||||
field: SubTest,
|
||||
}
|
||||
|
||||
#[derive(YaDeserialize, Debug, PartialEq)]
|
||||
struct SubTest {
|
||||
content: Option<String>
|
||||
content: Option<String>,
|
||||
}
|
||||
|
||||
impl Default for SubTest {
|
||||
fn default() -> Self {
|
||||
SubTest {
|
||||
content: None
|
||||
}
|
||||
SubTest { content: None }
|
||||
}
|
||||
}
|
||||
|
||||
convert_and_validate!(Test, Some(Test{field: SubTest{content: Some("value".to_string())}}), Some("<field><content>value</content></field>"));
|
||||
convert_and_validate!(
|
||||
Test,
|
||||
Some(Test {
|
||||
field: SubTest {
|
||||
content: Some("value".to_string())
|
||||
}
|
||||
}),
|
||||
Some("<field><content>value</content></field>")
|
||||
);
|
||||
convert_and_validate!(Test, None, None);
|
||||
}
|
||||
|
||||
110
yaserde/tests/se_default.rs
Normal file
110
yaserde/tests/se_default.rs
Normal file
@@ -0,0 +1,110 @@
|
||||
#[macro_use]
|
||||
extern crate log;
|
||||
extern crate xml;
|
||||
extern crate yaserde;
|
||||
#[macro_use]
|
||||
extern crate yaserde_derive;
|
||||
|
||||
use std::io::Write;
|
||||
use yaserde::ser::to_string;
|
||||
use yaserde::YaSerialize;
|
||||
|
||||
macro_rules! convert_and_validate {
|
||||
($model:expr, $content:expr) => {
|
||||
let data: Result<String, String> = to_string(&$model);
|
||||
assert_eq!(data, Ok(String::from($content)));
|
||||
};
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn se_default_field_string() {
|
||||
fn default_string() -> String {
|
||||
"my_default_value".to_string()
|
||||
}
|
||||
|
||||
#[derive(YaSerialize, PartialEq, Debug)]
|
||||
#[yaserde(root = "base")]
|
||||
pub struct XmlStruct {
|
||||
#[yaserde(default = "default_string")]
|
||||
background: String,
|
||||
}
|
||||
|
||||
let content = "<?xml version=\"1.0\" encoding=\"utf-8\"?><base />";
|
||||
convert_and_validate!(
|
||||
XmlStruct {
|
||||
background: "my_default_value".to_string(),
|
||||
},
|
||||
content
|
||||
);
|
||||
let content = "<?xml version=\"1.0\" encoding=\"utf-8\"?><base><background>my_value</background></base>";
|
||||
convert_and_validate!(
|
||||
XmlStruct {
|
||||
background: "my_value".to_string(),
|
||||
},
|
||||
content
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn se_default_field_boolean() {
|
||||
fn default_boolean() -> bool {
|
||||
true
|
||||
}
|
||||
|
||||
#[derive(YaSerialize, PartialEq, Debug)]
|
||||
#[yaserde(root = "base")]
|
||||
pub struct XmlStruct {
|
||||
#[yaserde(default = "default_boolean")]
|
||||
background: bool,
|
||||
}
|
||||
|
||||
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
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn se_default_field_number() {
|
||||
fn default_number() -> u8 {
|
||||
6
|
||||
}
|
||||
|
||||
#[derive(YaSerialize, PartialEq, Debug)]
|
||||
#[yaserde(root = "base")]
|
||||
pub struct XmlStruct {
|
||||
#[yaserde(default = "default_number")]
|
||||
background: u8,
|
||||
}
|
||||
|
||||
let content = "<?xml version=\"1.0\" encoding=\"utf-8\"?><base />";
|
||||
convert_and_validate!(XmlStruct { background: 6 }, content);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn se_default_attribute_string() {
|
||||
fn default_string() -> String {
|
||||
"my_default_value".to_string()
|
||||
}
|
||||
|
||||
#[derive(YaSerialize, PartialEq, Debug)]
|
||||
#[yaserde(root = "base")]
|
||||
pub struct XmlStruct {
|
||||
#[yaserde(attribute, default = "default_string")]
|
||||
background: String,
|
||||
}
|
||||
|
||||
let content = "<?xml version=\"1.0\" encoding=\"utf-8\"?><base />";
|
||||
convert_and_validate!(
|
||||
XmlStruct {
|
||||
background: "my_default_value".to_string(),
|
||||
},
|
||||
content
|
||||
);
|
||||
}
|
||||
@@ -124,22 +124,28 @@ fn ser_option() {
|
||||
fn de_option_struct() {
|
||||
#[derive(YaSerialize, Debug, PartialEq)]
|
||||
struct Test {
|
||||
field: SubTest
|
||||
field: SubTest,
|
||||
}
|
||||
|
||||
#[derive(YaSerialize, Debug, PartialEq)]
|
||||
struct SubTest {
|
||||
content: Option<String>
|
||||
content: Option<String>,
|
||||
}
|
||||
|
||||
impl Default for SubTest {
|
||||
fn default() -> Self {
|
||||
SubTest {
|
||||
content: None
|
||||
}
|
||||
SubTest { content: None }
|
||||
}
|
||||
}
|
||||
|
||||
convert_and_validate!(Test, Some(Test{field: SubTest{content: Some("value".to_string())}}), Some("<field><content>value</content></field>"));
|
||||
convert_and_validate!(
|
||||
Test,
|
||||
Some(Test {
|
||||
field: SubTest {
|
||||
content: Some("value".to_string())
|
||||
}
|
||||
}),
|
||||
Some("<field><content>value</content></field>")
|
||||
);
|
||||
convert_and_validate!(Test, None, None);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user