# Skip Serializing ## skip_serializing Attribute `skip_serializing` will skip the serialisation of the field if it is set to `true`. Default value is `false`. - `#[yaserde(skip_serializing = true)]` - Skip serialization of the field. - `#[yaserde(skip_serializing = false)]` - The field will be serialized. Default value. - Not set - The field will be serialized (same as `false`). ### Full example ```rust use yaserde_derive::YaSerialize; #[derive(YaSerialize, PartialEq, Debug)] struct Struct { #[yaserde(skip_serializing = true)] skip_value: String, do_not_skip_value: String, } fn main() { let obj = Struct { skip_value: "skipped".to_string(), do_not_skip_value: "not skipped".to_string() }; let yaserde_cfg = yaserde::ser::Config::default(); //Output: not skipped print!("{}", yaserde::ser::to_string_with_config(&obj, &yaserde_cfg).ok().unwrap()); } ``` ## skip_serializing_if Attribute `skip_serializing_if` will skip the serialisation for this field if the condition is true. To conditionally skip serialization of a field a string needs to be set to `skip_serializing_if`, that refers to a function name, implemented on for the struct. This function has one parameter (reference to the field value) and returns a `bool` value. ```rust use yaserde_derive::YaSerialize; #[derive(YaSerialize, PartialEq, Debug)] struct Struct { #[yaserde(skip_serializing_if = "check_string")] string_value: String, //... } impl Struct { // Skip serializing the field if the value is 'unset'. fn check_string(&self, value: &str) -> bool { value == "unset" } //... } ``` ### Full example ```rust use yaserde_derive::YaSerialize; #[derive(YaSerialize, PartialEq, Debug)] enum Enum { Enum1, Enum2, } #[derive(YaSerialize, PartialEq, Debug)] struct Struct { #[yaserde(skip_serializing_if = "check_bool")] bool_value: bool, #[yaserde(skip_serializing_if = "check_string")] string_value: String, #[yaserde(skip_serializing_if = "check_i32")] i32_value: i32, #[yaserde(skip_serializing_if = "check_optional_string")] optional_string_value: Option, #[yaserde(skip_serializing_if = "check_enum")] enum_value: Enum, } impl Struct { fn check_bool(&self, value: &bool) -> bool { value == &false } fn check_string(&self, value: &str) -> bool { value == "unset" } fn check_i32(&self, value: &i32) -> bool { value < &10 } fn check_optional_string(&self, value: &Option) -> bool { value == &Some("unset".to_string()) } fn check_enum(&self, value: &Enum) -> bool { value == &Enum::Enum1 } } fn main() { let obj_no_skip = Struct { bool_value: true, string_value: "testString".to_string(), i32_value: 10, optional_string_value: Some("optionalTestString".to_string()), enum_value: Enum::Enum2, }; let obj_skip_all = Struct { bool_value: false, string_value: "unset".to_string(), i32_value: 9, optional_string_value: Some("unset".to_string()), enum_value: Enum::Enum1, }; let yaserde_cfg = yaserde::ser::Config::default(); //Output: truetestString10optionalTestStringEnum2 println!("{}", yaserde::ser::to_string_with_config(&obj_no_skip, &yaserde_cfg).ok().unwrap()); //Output: Enum1 //Known issue, enum fields are not working as expected, see: https://github.com/media-io/yaserde/issues/139 println!("{}", yaserde::ser::to_string_with_config(&obj_skip_all, &yaserde_cfg).ok().unwrap()); } ``` ### Known issues - Currently, `enum` fields are not working with `skip_serializing_if`: https://github.com/media-io/yaserde/issues/139