skip serialization if value equals to default

This commit is contained in:
Marc-Antoine Arnaud
2018-12-07 10:21:59 +01:00
parent 9f19057353
commit 28c13f5861
15 changed files with 885 additions and 525 deletions

View File

@@ -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,

View File

@@ -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
View 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
);
}

View File

@@ -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);
}