From c82a8ec48c92acb42ca4b53a81af2bf96282dc3c Mon Sep 17 00:00:00 2001 From: lovasoa Date: Sat, 6 Apr 2024 21:57:38 +0200 Subject: [PATCH] option deserialization --- src/de.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/de.rs b/src/de.rs index d8e860e..fe99e62 100644 --- a/src/de.rs +++ b/src/de.rs @@ -302,11 +302,17 @@ impl<'de, 'a, R: Read> de::Deserializer<'de> for &'a mut Deserializer { visitor.visit_u64(self.read_integer(header)?) } - fn deserialize_option(self, _visitor: V) -> Result + fn deserialize_option(self, visitor: V) -> Result where V: Visitor<'de>, { - todo!() + let header = self.read_header()?; + if header.element_type == ElementType::Null { + self.read_null(header)?; + visitor.visit_none() + } else { + visitor.visit_some(self) + } } fn deserialize_unit(self, visitor: V) -> Result @@ -561,5 +567,6 @@ mod tests { #[test] fn test_null() { from_bytes::<()>(b"\x00").unwrap(); + assert_eq!(from_bytes::>(b"\x00").unwrap(), None); } }