core_json_traits/
option.rs1use crate::{Read, Stack, JsonError, Type, Value, JsonDeserialize, JsonSerialize};
2
3impl<T: JsonDeserialize> JsonDeserialize for Option<T> {
4 fn deserialize<'read, 'parent, B: Read<'read>, S: Stack>(
6 mut value: Value<'read, 'parent, B, S>,
7 ) -> Result<Self, JsonError<'read, B, S>> {
8 if matches!(value.kind()?, Type::Null) {
9 let () = value.to_null()?;
10 return Ok(None);
11 }
12 T::deserialize(value).map(Some)
13 }
14}
15
16impl<T: JsonSerialize> JsonSerialize for Option<T> {
17 fn serialize(&self) -> impl Iterator<Item = char> {
19 self
20 .as_ref()
21 .map(|value| T::serialize(value))
22 .into_iter()
23 .flatten()
24 .chain(self.is_none().then(|| "null".chars()).into_iter().flatten())
25 }
26}