diff --git a/src/de.rs b/src/de.rs index bee94a92..3558f3e2 100644 --- a/src/de.rs +++ b/src/de.rs @@ -194,7 +194,10 @@ impl<'de> de::Deserializer<'de> for Part<'de> { where V: de::Visitor<'de>, { - self.0.into_deserializer().deserialize_any(visitor) + match self.0 { + Cow::Borrowed(value) => visitor.visit_borrowed_str(value), + Cow::Owned(value) => visitor.visit_string(value), + } } fn deserialize_option(self, visitor: V) -> Result diff --git a/tests/test_deserialize.rs b/tests/test_deserialize.rs index a9ae9f0a..69105995 100644 --- a/tests/test_deserialize.rs +++ b/tests/test_deserialize.rs @@ -29,6 +29,13 @@ fn deserialize_str() { assert_eq!(serde_urlencoded::from_str("first=23&last=42"), Ok(result)); } +#[test] +fn deserialize_borrowed_str() { + let result = vec![("first", 23), ("last", 42)]; + + assert_eq!(serde_urlencoded::from_str("first=23&last=42"), Ok(result)); +} + #[test] fn deserialize_reader() { let result = vec![("first".to_owned(), 23), ("last".to_owned(), 42)];