Merge pull request #153 from lbenini/skip-fixes
skip/skip_if are not working for Enum, Struct and Vec
This commit is contained in:
commit
8483c3be79
@ -25,3 +25,72 @@ fn skip_serializing() {
|
|||||||
let content = "<base />";
|
let content = "<base />";
|
||||||
serialize_and_validate!(model, content);
|
serialize_and_validate!(model, content);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn skip_serializing_for_nested_struct() {
|
||||||
|
init();
|
||||||
|
|
||||||
|
#[derive(YaSerialize, PartialEq, Debug)]
|
||||||
|
#[yaserde(rename = "base")]
|
||||||
|
pub struct XmlStruct {
|
||||||
|
#[yaserde(skip_serializing)]
|
||||||
|
skipped_serializing: XmlStructChild,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(YaSerialize, PartialEq, Debug)]
|
||||||
|
#[yaserde(rename = "child")]
|
||||||
|
pub struct XmlStructChild {
|
||||||
|
}
|
||||||
|
|
||||||
|
let model = XmlStruct {
|
||||||
|
skipped_serializing: XmlStructChild{},
|
||||||
|
};
|
||||||
|
|
||||||
|
let content = "<base />";
|
||||||
|
serialize_and_validate!(model, content);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn skip_serializing_for_enum() {
|
||||||
|
init();
|
||||||
|
|
||||||
|
#[derive(YaSerialize, PartialEq, Debug)]
|
||||||
|
#[yaserde(rename = "base")]
|
||||||
|
pub struct XmlStruct {
|
||||||
|
#[yaserde(skip_serializing)]
|
||||||
|
skipped_serializing: XmlEnum,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(YaSerialize, PartialEq, Debug)]
|
||||||
|
#[yaserde(rename = "child")]
|
||||||
|
pub enum XmlEnum {
|
||||||
|
Ok
|
||||||
|
}
|
||||||
|
|
||||||
|
let model = XmlStruct {
|
||||||
|
skipped_serializing: XmlEnum::Ok,
|
||||||
|
};
|
||||||
|
|
||||||
|
let content = "<base />";
|
||||||
|
serialize_and_validate!(model, content);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn skip_serializing_for_vec() {
|
||||||
|
init();
|
||||||
|
|
||||||
|
#[derive(YaSerialize, PartialEq, Debug)]
|
||||||
|
#[yaserde(rename = "base")]
|
||||||
|
pub struct XmlStruct {
|
||||||
|
#[yaserde(skip_serializing)]
|
||||||
|
skipped_serializing: Vec<i8>,
|
||||||
|
}
|
||||||
|
|
||||||
|
let model = XmlStruct {
|
||||||
|
skipped_serializing: vec![1,2,3],
|
||||||
|
};
|
||||||
|
|
||||||
|
let content = "<base />";
|
||||||
|
serialize_and_validate!(model, content);
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@ -119,3 +119,89 @@ fn skip_serializing_if_for_struct_attributes() {
|
|||||||
let content = "<base />";
|
let content = "<base />";
|
||||||
serialize_and_validate!(model, content);
|
serialize_and_validate!(model, content);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn skip_serializing_if_for_nested_struct() {
|
||||||
|
init();
|
||||||
|
|
||||||
|
#[derive(YaSerialize, PartialEq, Debug)]
|
||||||
|
#[yaserde(rename = "base")]
|
||||||
|
pub struct XmlStruct {
|
||||||
|
#[yaserde(skip_serializing_if="check_child")]
|
||||||
|
skipped_serializing: XmlStructChild,
|
||||||
|
}
|
||||||
|
impl XmlStruct
|
||||||
|
{
|
||||||
|
fn check_child(&self, _child:&XmlStructChild)->bool
|
||||||
|
{
|
||||||
|
true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#[derive(YaSerialize, PartialEq, Debug)]
|
||||||
|
#[yaserde(rename = "child")]
|
||||||
|
pub struct XmlStructChild {
|
||||||
|
}
|
||||||
|
|
||||||
|
let model = XmlStruct {
|
||||||
|
skipped_serializing: XmlStructChild{},
|
||||||
|
};
|
||||||
|
|
||||||
|
let content = "<base />";
|
||||||
|
serialize_and_validate!(model, content);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn skip_serializing_if_for_enum() {
|
||||||
|
init();
|
||||||
|
|
||||||
|
#[derive(YaSerialize, PartialEq, Debug)]
|
||||||
|
#[yaserde(rename = "base")]
|
||||||
|
pub struct XmlStruct {
|
||||||
|
#[yaserde(skip_serializing_if="check_enum")]
|
||||||
|
skipped_serializing: XmlEnum,
|
||||||
|
}
|
||||||
|
impl XmlStruct
|
||||||
|
{
|
||||||
|
fn check_enum(&self, _child:&XmlEnum)->bool
|
||||||
|
{
|
||||||
|
true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#[derive(YaSerialize, PartialEq, Debug)]
|
||||||
|
#[yaserde(rename = "child")]
|
||||||
|
pub enum XmlEnum {
|
||||||
|
Ok
|
||||||
|
}
|
||||||
|
|
||||||
|
let model = XmlStruct {
|
||||||
|
skipped_serializing: XmlEnum::Ok,
|
||||||
|
};
|
||||||
|
|
||||||
|
let content = "<base />";
|
||||||
|
serialize_and_validate!(model, content);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn skip_serializing_if_for_vec() {
|
||||||
|
init();
|
||||||
|
|
||||||
|
#[derive(YaSerialize, PartialEq, Debug)]
|
||||||
|
#[yaserde(rename = "base")]
|
||||||
|
pub struct XmlStruct {
|
||||||
|
#[yaserde(skip_serializing_if="check_vec")]
|
||||||
|
skipped_serializing: Vec<i8>,
|
||||||
|
}
|
||||||
|
impl XmlStruct
|
||||||
|
{
|
||||||
|
fn check_vec(&self, _child:&Vec<i8>)->bool
|
||||||
|
{
|
||||||
|
true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let model = XmlStruct {
|
||||||
|
skipped_serializing: vec![1,2,3],
|
||||||
|
};
|
||||||
|
|
||||||
|
let content = "<base />";
|
||||||
|
serialize_and_validate!(model, content);
|
||||||
|
}
|
||||||
@ -215,18 +215,22 @@ pub fn serialize(
|
|||||||
}
|
}
|
||||||
Field::FieldStruct { .. } => Some(if field.is_flatten() {
|
Field::FieldStruct { .. } => Some(if field.is_flatten() {
|
||||||
quote! {
|
quote! {
|
||||||
if let ::std::option::Option::Some(ref item) = &self.#label {
|
#conditions {
|
||||||
writer.set_start_event_name(::std::option::Option::None);
|
if let ::std::option::Option::Some(ref item) = &self.#label {
|
||||||
writer.set_skip_start_end(true);
|
writer.set_start_event_name(::std::option::Option::None);
|
||||||
::yaserde::YaSerialize::serialize(item, writer)?;
|
writer.set_skip_start_end(true);
|
||||||
|
::yaserde::YaSerialize::serialize(item, writer)?;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
quote! {
|
quote! {
|
||||||
if let ::std::option::Option::Some(ref item) = &self.#label {
|
#conditions {
|
||||||
writer.set_start_event_name(::std::option::Option::Some(#label_name.to_string()));
|
if let ::std::option::Option::Some(ref item) = &self.#label {
|
||||||
writer.set_skip_start_end(false);
|
writer.set_start_event_name(::std::option::Option::Some(#label_name.to_string()));
|
||||||
::yaserde::YaSerialize::serialize(item, writer)?;
|
writer.set_skip_start_end(false);
|
||||||
|
::yaserde::YaSerialize::serialize(item, writer)?;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
@ -243,9 +247,11 @@ pub fn serialize(
|
|||||||
};
|
};
|
||||||
|
|
||||||
Some(quote! {
|
Some(quote! {
|
||||||
writer.set_start_event_name(#start_event);
|
#conditions {
|
||||||
writer.set_skip_start_end(#skip_start);
|
writer.set_start_event_name(#start_event);
|
||||||
::yaserde::YaSerialize::serialize(&self.#label, writer)?;
|
writer.set_skip_start_end(#skip_start);
|
||||||
|
::yaserde::YaSerialize::serialize(&self.#label, writer)?;
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
Field::FieldVec { data_type } => match *data_type {
|
Field::FieldVec { data_type } => match *data_type {
|
||||||
@ -254,8 +260,10 @@ pub fn serialize(
|
|||||||
let inner = enclose_formatted_characters_for_value(&item_ident, label_name);
|
let inner = enclose_formatted_characters_for_value(&item_ident, label_name);
|
||||||
|
|
||||||
Some(quote! {
|
Some(quote! {
|
||||||
for yaserde_item in &self.#label {
|
#conditions {
|
||||||
#inner
|
for yaserde_item in &self.#label {
|
||||||
|
#inner
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -274,35 +282,43 @@ pub fn serialize(
|
|||||||
let inner = enclose_formatted_characters_for_value(&item_ident, label_name);
|
let inner = enclose_formatted_characters_for_value(&item_ident, label_name);
|
||||||
|
|
||||||
Some(quote! {
|
Some(quote! {
|
||||||
for yaserde_item in &self.#label {
|
#conditions {
|
||||||
#inner
|
for yaserde_item in &self.#label {
|
||||||
|
#inner
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
Field::FieldOption { .. } => Some(quote! {
|
Field::FieldOption { .. } => Some(quote! {
|
||||||
for item in &self.#label {
|
#conditions {
|
||||||
if let Some(value) = item {
|
for item in &self.#label {
|
||||||
writer.set_start_event_name(None);
|
if let Some(value) = item {
|
||||||
writer.set_skip_start_end(false);
|
writer.set_start_event_name(None);
|
||||||
::yaserde::YaSerialize::serialize(value, writer)?;
|
writer.set_skip_start_end(false);
|
||||||
|
::yaserde::YaSerialize::serialize(value, writer)?;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
Field::FieldStruct { .. } => {
|
Field::FieldStruct { .. } => {
|
||||||
if field.is_flatten() {
|
if field.is_flatten() {
|
||||||
Some(quote! {
|
Some(quote! {
|
||||||
for item in &self.#label {
|
#conditions {
|
||||||
writer.set_start_event_name(::std::option::Option::None);
|
for item in &self.#label {
|
||||||
writer.set_skip_start_end(true);
|
writer.set_start_event_name(::std::option::Option::None);
|
||||||
::yaserde::YaSerialize::serialize(item, writer)?;
|
writer.set_skip_start_end(true);
|
||||||
|
::yaserde::YaSerialize::serialize(item, writer)?;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
Some(quote! {
|
Some(quote! {
|
||||||
for item in &self.#label {
|
#conditions {
|
||||||
writer.set_start_event_name(::std::option::Option::Some(#label_name.to_string()));
|
for item in &self.#label {
|
||||||
writer.set_skip_start_end(false);
|
writer.set_start_event_name(::std::option::Option::Some(#label_name.to_string()));
|
||||||
::yaserde::YaSerialize::serialize(item, writer)?;
|
writer.set_skip_start_end(false);
|
||||||
|
::yaserde::YaSerialize::serialize(item, writer)?;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user