tendermint/serializers/
allow_empty_object.rs1use serde::{Deserialize, Deserializer};
2
3pub fn allow_empty_object<'de, D, T>(deserializer: D) -> Result<Option<T>, D::Error>
5where
6 D: Deserializer<'de>,
7 T: Deserialize<'de>,
8{
9 #[derive(Deserialize)]
10 #[serde(
11 untagged,
12 deny_unknown_fields,
13 expecting = "object, empty object or null"
14 )]
15 enum Helper<T> {
16 Data(T),
17 Empty {},
18 Null,
19 }
20
21 match Helper::deserialize(deserializer) {
22 Ok(Helper::Data(data)) => Ok(Some(data)),
23 Ok(Helper::Empty {} | Helper::Null) => Ok(None),
24 Err(e) => Err(e),
25 }
26}