1#[cfg(feature = "json")]
4use crate::google::protobuf::Empty;
5
6#[cfg(feature = "json")]
7impl serde::Serialize for Empty {
8 fn serialize<S: serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
10 use serde::ser::SerializeMap;
11 s.serialize_map(Some(0))?.end()
12 }
13}
14
15#[cfg(feature = "json")]
16impl<'de> serde::Deserialize<'de> for Empty {
17 fn deserialize<D: serde::Deserializer<'de>>(d: D) -> Result<Self, D::Error> {
19 use serde::de::{MapAccess, Visitor};
20 struct V;
21 impl<'de> Visitor<'de> for V {
22 type Value = Empty;
23 fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
24 f.write_str("an empty JSON object")
25 }
26 fn visit_map<A: MapAccess<'de>>(self, mut map: A) -> Result<Empty, A::Error> {
27 while map
28 .next_entry::<serde::de::IgnoredAny, serde::de::IgnoredAny>()?
29 .is_some()
30 {}
31 Ok(Empty {
32 ..Default::default()
33 })
34 }
35 }
36 d.deserialize_map(V)
37 }
38}
39
40#[cfg(all(test, feature = "json"))]
41mod tests {
42 use super::*;
43
44 #[test]
45 fn empty_serializes_as_empty_object() {
46 let e = Empty::default();
47 assert_eq!(serde_json::to_string(&e).unwrap(), "{}");
48 }
49
50 #[test]
51 fn empty_deserializes_from_empty_object() {
52 let _: Empty = serde_json::from_str("{}").unwrap();
53 }
54}