From c4ac687cee93981b07c67f1813ba6129b8c9bfa5 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Wed, 5 Apr 2023 15:07:38 -0700 Subject: [PATCH 1/2] Add test of deserializing empty document to Option --- tests/test_de.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/test_de.rs b/tests/test_de.rs index 33c8ffd6..73315bdf 100644 --- a/tests/test_de.rs +++ b/tests/test_de.rs @@ -556,6 +556,10 @@ fn test_no_required_fields() { let expected = BTreeMap::new(); let deserialized: BTreeMap = serde_yaml::from_str(document).unwrap(); assert_eq!(expected, deserialized); + + let expected = None; + let deserialized: Option = serde_yaml::from_str(document).unwrap(); + assert_eq!(expected, deserialized); } } From 0d98534dda1defa887982341aa64d704f153c5fa Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Wed, 5 Apr 2023 15:08:37 -0700 Subject: [PATCH 2/2] Allow empty document to be deserialized using visit_none --- src/de.rs | 2 +- tests/test_de.rs | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/de.rs b/src/de.rs index 6c2f97f4..2edd54bf 100644 --- a/src/de.rs +++ b/src/de.rs @@ -1247,7 +1247,7 @@ impl<'de, 'document> de::Deserializer<'de> for &mut DeserializerFromEvents<'de, } Event::SequenceEnd => panic!("unexpected end of sequence"), Event::MappingEnd => panic!("unexpected end of mapping"), - Event::Void => break Err(error::new(ErrorImpl::EndOfStream)), + Event::Void => break visitor.visit_none(), } } // The de::Error impl creates errors with unknown line and column. Fill diff --git a/tests/test_de.rs b/tests/test_de.rs index 73315bdf..24845d32 100644 --- a/tests/test_de.rs +++ b/tests/test_de.rs @@ -560,6 +560,10 @@ fn test_no_required_fields() { let expected = None; let deserialized: Option = serde_yaml::from_str(document).unwrap(); assert_eq!(expected, deserialized); + + let expected = Value::Null; + let deserialized: Value = serde_yaml::from_str(document).unwrap(); + assert_eq!(expected, deserialized); } }