From ecb91cfcd7ba2d893b0697be6631109a14e71666 Mon Sep 17 00:00:00 2001 From: Without Boats Date: Sat, 20 May 2017 22:30:50 -0700 Subject: [PATCH] Deserialize () from input without key/value pairs. --- Cargo.toml | 2 +- README.md | 2 +- src/de.rs | 8 +++++++- tests/test_deserialize.rs | 8 ++++++++ 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index d293bff7..2d4ef14e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "serde_urlencoded" -version = "0.5.0" +version = "0.5.1" authors = ["Anthony Ramine "] license = "MIT/Apache-2.0" repository = "https://github.com/nox/serde_urlencoded" diff --git a/README.md b/README.md index 316add18..e55a86c2 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ This crate works with Cargo and can be found on ```toml [dependencies] -serde_urlencoded = "0.4.2" +serde_urlencoded = "0.5.1" ``` [crates.io]: https://crates.io/crates/serde_urlencoded diff --git a/src/de.rs b/src/de.rs index 9eec6a94..137093d2 100644 --- a/src/de.rs +++ b/src/de.rs @@ -110,6 +110,13 @@ impl<'de> de::Deserializer<'de> for Deserializer<'de> { visitor.visit_seq(self.inner) } + fn deserialize_unit(self, visitor: V) -> Result + where V: de::Visitor<'de>, + { + self.inner.end()?; + visitor.visit_unit() + } + forward_to_deserialize_any! { bool u8 @@ -125,7 +132,6 @@ impl<'de> de::Deserializer<'de> for Deserializer<'de> { char str string - unit option bytes byte_buf diff --git a/tests/test_deserialize.rs b/tests/test_deserialize.rs index bd92ba9e..d2fb5fef 100644 --- a/tests/test_deserialize.rs +++ b/tests/test_deserialize.rs @@ -32,3 +32,11 @@ fn deserialize_option() { ]; assert_eq!(serde_urlencoded::from_str("first=23&last=42"), Ok(result)); } + +#[test] +fn deserialize_unit() { + assert_eq!(serde_urlencoded::from_str(""), Ok(())); + assert_eq!(serde_urlencoded::from_str("&"), Ok(())); + assert_eq!(serde_urlencoded::from_str("&&"), Ok(())); + assert!(serde_urlencoded::from_str::<()>("first=23").is_err()); +}