diff --git a/yaserde_derive/src/common/field.rs b/yaserde_derive/src/common/field.rs index 9cdb65e..35a8850 100644 --- a/yaserde_derive/src/common/field.rs +++ b/yaserde_derive/src/common/field.rs @@ -145,13 +145,18 @@ impl YaSerdeField { .map(|builder| quote!(let yaserde_inner = #builder;)) .unwrap_or_default(); + let skip_if = self + .get_skip_serializing_if_function() + .map(|skip_if_function| quote!(!self.#skip_if_function(&self.#label))) + .unwrap_or(quote!(true)); + self .get_default_function() .map(|default_function| { quote! { #yaserde_inner_definition let struct_start_event = - if self.#label != #default_function() { + if #skip_if && self.#label != #default_function() { #setter } else { struct_start_event @@ -160,7 +165,7 @@ impl YaSerdeField { }) .unwrap_or(quote! { #yaserde_inner_definition - let struct_start_event = #setter; + let struct_start_event = if #skip_if { #setter } else { struct_start_event }; }) } } diff --git a/yaserde_derive/src/lib.rs b/yaserde_derive/src/lib.rs index f09ab20..9d881a1 100644 --- a/yaserde_derive/src/lib.rs +++ b/yaserde_derive/src/lib.rs @@ -14,7 +14,7 @@ pub fn derive_deserialize(input: TokenStream) -> TokenStream { let ast = syn::parse(input).unwrap(); match de::expand_derive_deserialize(&ast) { Ok(expanded) => expanded.into(), - Err(msg) => panic!(msg), + Err(msg) => panic!("{}", msg), } } @@ -23,6 +23,6 @@ pub fn derive_serialize(input: TokenStream) -> TokenStream { let ast = syn::parse(input).unwrap(); match ser::expand_derive_serialize(&ast) { Ok(expanded) => expanded.into(), - Err(msg) => panic!(msg), + Err(msg) => panic!("{}", msg), } }