diff --git a/yaserde/tests/skip_if.rs b/yaserde/tests/skip_if.rs
index a485a8f..6bb7910 100644
--- a/yaserde/tests/skip_if.rs
+++ b/yaserde/tests/skip_if.rs
@@ -62,3 +62,60 @@ fn skip_serializing_if_for_struct() {
let content = "";
serialize_and_validate!(model, content);
}
+
+#[test]
+fn skip_serializing_if_for_struct_attributes() {
+ init();
+
+ fn default_string_function() -> String {
+ "mask_default".to_string()
+ }
+
+ #[derive(YaSerialize, PartialEq, Debug)]
+ #[yaserde(rename = "base")]
+ pub struct XmlStruct {
+ #[yaserde(
+ attribute,
+ skip_serializing_if = "check_string_function",
+ default = "default_string_function"
+ )]
+ string_with_default_item: String,
+ #[yaserde(attribute, skip_serializing_if = "check_string_function")]
+ string_item: String,
+ #[yaserde(attribute, skip_serializing_if = "check_bool_function")]
+ bool_item: bool,
+ #[yaserde(attribute, skip_serializing_if = "check_f32_function")]
+ f32_item: f32,
+ #[yaserde(attribute, skip_serializing_if = "check_option_string_function")]
+ option_string_item: Option,
+ }
+
+ impl XmlStruct {
+ fn check_string_function(&self, value: &str) -> bool {
+ value == "something"
+ }
+
+ fn check_option_string_function(&self, value: &Option) -> bool {
+ value == &Some("something".to_string())
+ }
+
+ fn check_bool_function(&self, value: &bool) -> bool {
+ value == &true
+ }
+
+ fn check_f32_function(&self, value: &f32) -> bool {
+ (value - 0.0).abs() < std::f32::EPSILON
+ }
+ }
+
+ let model = XmlStruct {
+ string_with_default_item: "mask_default".to_string(),
+ string_item: "something".to_string(),
+ bool_item: true,
+ f32_item: 0.0,
+ option_string_item: Some("something".to_string()),
+ };
+
+ let content = "";
+ serialize_and_validate!(model, content);
+}