Alter yaserde_derive crate to support skip_serialize_if for attributes
This commit is contained in:
parent
fb19a35d43
commit
0139d63f6d
@ -145,13 +145,18 @@ impl YaSerdeField {
|
|||||||
.map(|builder| quote!(let yaserde_inner = #builder;))
|
.map(|builder| quote!(let yaserde_inner = #builder;))
|
||||||
.unwrap_or_default();
|
.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
|
self
|
||||||
.get_default_function()
|
.get_default_function()
|
||||||
.map(|default_function| {
|
.map(|default_function| {
|
||||||
quote! {
|
quote! {
|
||||||
#yaserde_inner_definition
|
#yaserde_inner_definition
|
||||||
let struct_start_event =
|
let struct_start_event =
|
||||||
if self.#label != #default_function() {
|
if #skip_if && self.#label != #default_function() {
|
||||||
#setter
|
#setter
|
||||||
} else {
|
} else {
|
||||||
struct_start_event
|
struct_start_event
|
||||||
@ -160,7 +165,7 @@ impl YaSerdeField {
|
|||||||
})
|
})
|
||||||
.unwrap_or(quote! {
|
.unwrap_or(quote! {
|
||||||
#yaserde_inner_definition
|
#yaserde_inner_definition
|
||||||
let struct_start_event = #setter;
|
let struct_start_event = if #skip_if { #setter } else { struct_start_event };
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,7 +14,7 @@ pub fn derive_deserialize(input: TokenStream) -> TokenStream {
|
|||||||
let ast = syn::parse(input).unwrap();
|
let ast = syn::parse(input).unwrap();
|
||||||
match de::expand_derive_deserialize(&ast) {
|
match de::expand_derive_deserialize(&ast) {
|
||||||
Ok(expanded) => expanded.into(),
|
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();
|
let ast = syn::parse(input).unwrap();
|
||||||
match ser::expand_derive_serialize(&ast) {
|
match ser::expand_derive_serialize(&ast) {
|
||||||
Ok(expanded) => expanded.into(),
|
Ok(expanded) => expanded.into(),
|
||||||
Err(msg) => panic!(msg),
|
Err(msg) => panic!("{}", msg),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user