Fix struct newtype deserialization (and add tests)

This commit is contained in:
Sam Sieber 2018-11-19 08:59:04 -07:00
parent 199ed02274
commit 0ecc730e64
3 changed files with 33 additions and 1 deletions

View File

@ -208,6 +208,16 @@ impl<'de> de::Deserializer<'de> for Part<'de> {
visitor.visit_enum(ValueEnumAccess(self.0))
}
fn deserialize_newtype_struct<V>(
self,
_name: &'static str,
visitor: V,
) -> Result<V::Value, Self::Error>
where V: de::Visitor<'de>,
{
visitor.visit_newtype_struct(self)
}
forward_to_deserialize_any! {
char
str
@ -216,7 +226,6 @@ impl<'de> de::Deserializer<'de> for Part<'de> {
bytes
byte_buf
unit_struct
newtype_struct
tuple_struct
struct
identifier

View File

@ -2,6 +2,17 @@ extern crate serde_urlencoded;
#[macro_use]
extern crate serde_derive;
#[derive(Deserialize, Debug, PartialEq)]
struct NewType<T>(T);
#[test]
fn deserialize_newtype_i32() {
let result = vec![("field".to_owned(), NewType(11))];
assert_eq!(serde_urlencoded::from_str("field=11"),
Ok(result));
}
#[test]
fn deserialize_bytes() {
let result = vec![("first".to_owned(), 23), ("last".to_owned(), 42)];

View File

@ -2,6 +2,18 @@ extern crate serde_urlencoded;
#[macro_use]
extern crate serde_derive;
#[derive(Serialize)]
struct NewType<T>(T);
#[test]
fn serialize_newtype_i32() {
let params = &[("field", Some(NewType(11))),];
assert_eq!(
serde_urlencoded::to_string(params),
Ok("field=11".to_owned())
);
}
#[test]
fn serialize_option_map_int() {
let params = &[("first", Some(23)), ("middle", None), ("last", Some(42))];