tendermint/serializers/
allow_empty_object.rs

1use serde::{Deserialize, Deserializer};
2
3/// Deserialize `null` or an empty object `{}` as `None`.
4pub 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}