Fix struct newtype deserialization (and add tests)
This commit is contained in:
parent
199ed02274
commit
0ecc730e64
11
src/de.rs
11
src/de.rs
@ -208,6 +208,16 @@ impl<'de> de::Deserializer<'de> for Part<'de> {
|
|||||||
visitor.visit_enum(ValueEnumAccess(self.0))
|
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! {
|
forward_to_deserialize_any! {
|
||||||
char
|
char
|
||||||
str
|
str
|
||||||
@ -216,7 +226,6 @@ impl<'de> de::Deserializer<'de> for Part<'de> {
|
|||||||
bytes
|
bytes
|
||||||
byte_buf
|
byte_buf
|
||||||
unit_struct
|
unit_struct
|
||||||
newtype_struct
|
|
||||||
tuple_struct
|
tuple_struct
|
||||||
struct
|
struct
|
||||||
identifier
|
identifier
|
||||||
|
@ -2,6 +2,17 @@ extern crate serde_urlencoded;
|
|||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate serde_derive;
|
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]
|
#[test]
|
||||||
fn deserialize_bytes() {
|
fn deserialize_bytes() {
|
||||||
let result = vec![("first".to_owned(), 23), ("last".to_owned(), 42)];
|
let result = vec![("first".to_owned(), 23), ("last".to_owned(), 42)];
|
||||||
|
@ -2,6 +2,18 @@ extern crate serde_urlencoded;
|
|||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate serde_derive;
|
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]
|
#[test]
|
||||||
fn serialize_option_map_int() {
|
fn serialize_option_map_int() {
|
||||||
let params = &[("first", Some(23)), ("middle", None), ("last", Some(42))];
|
let params = &[("first", Some(23)), ("middle", None), ("last", Some(42))];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user