34 lines
1012 B
Rust
34 lines
1012 B
Rust
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<String>,
|
|
}
|
|
|
|
#[derive(Serialize, Deserialize, PartialEq, Debug)]
|
|
struct NoneStruct {
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
x: Option<String>,
|
|
}
|
|
|
|
#[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::<StringStruct>(json!({"x": ""})).unwrap(), string);
|
|
assert_eq!(from_json_value::<NoneStruct>(json!({})).unwrap(), none);
|
|
}
|