diff --git a/serde/src/private/de.rs b/serde/src/private/de.rs index eb5424cc..bcb964a9 100644 --- a/serde/src/private/de.rs +++ b/serde/src/private/de.rs @@ -2763,6 +2763,13 @@ where } } + fn deserialize_unit(self, visitor: V) -> Result + where + V: Visitor<'de>, + { + visitor.visit_unit() + } + forward_to_deserialize_other! { deserialize_bool() deserialize_i8() @@ -2780,7 +2787,6 @@ where deserialize_string() deserialize_bytes() deserialize_byte_buf() - deserialize_unit() deserialize_unit_struct(&'static str) deserialize_seq() deserialize_tuple(usize) diff --git a/serde/src/private/ser.rs b/serde/src/private/ser.rs index 70f33818..eb8cfc98 100644 --- a/serde/src/private/ser.rs +++ b/serde/src/private/ser.rs @@ -1124,7 +1124,7 @@ where } fn serialize_unit(self) -> Result { - Err(Self::bad_type(Unsupported::Unit)) + Ok(()) } fn serialize_unit_struct(self, _: &'static str) -> Result { diff --git a/test_suite/tests/test_annotations.rs b/test_suite/tests/test_annotations.rs index 06c485df..7604fe03 100644 --- a/test_suite/tests/test_annotations.rs +++ b/test_suite/tests/test_annotations.rs @@ -1967,6 +1967,29 @@ fn test_flatten_map_twice() { ); } +#[test] +fn test_flatten_unit() { + #[derive(Debug, PartialEq, Serialize, Deserialize)] + struct Response { + #[serde(flatten)] + data: T, + status: usize, + } + + assert_tokens( + &Response { + data: (), + status: 0, + }, + &[ + Token::Map { len: None }, + Token::Str("status"), + Token::U64(0), + Token::MapEnd, + ], + ); +} + #[test] fn test_flatten_unsupported_type() { #[derive(Debug, PartialEq, Serialize, Deserialize)]