use serde::{Deserialize, Serialize}; use serde_json::{from_value as from_json_value, json, to_value as to_json_value}; #[derive(Serialize, Deserialize, PartialEq, Debug)] struct StringStruct { #[serde( deserialize_with = "ruma_serde::empty_string_as_none", serialize_with = "ruma_serde::none_as_empty_string" )] x: Option, } #[derive(Serialize, Deserialize, PartialEq, Debug)] struct NoneStruct { #[serde(skip_serializing_if = "Option::is_none")] x: Option, } #[test] fn empty_se() { let string = StringStruct { x: None }; let none = NoneStruct { x: None }; assert_eq!(to_json_value(string).unwrap(), json!({"x": ""})); assert_eq!(to_json_value(none).unwrap(), json!({})); } #[test] fn empty_de() { let string = StringStruct { x: None }; let none = NoneStruct { x: None }; assert_eq!(from_json_value::(json!({"x": ""})).unwrap(), string); assert_eq!(from_json_value::(json!({})).unwrap(), none); }