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))
|
||||
}
|
||||
|
||||
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
|
||||
|
@ -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)];
|
||||
|
@ -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))];
|
||||
|
Loading…
x
Reference in New Issue
Block a user