commit
9931bc5318
14
src/de.rs
14
src/de.rs
@ -4,6 +4,7 @@ use serde::de;
|
|||||||
|
|
||||||
pub use serde::de::value::Error;
|
pub use serde::de::value::Error;
|
||||||
use serde::de::value::MapDeserializer;
|
use serde::de::value::MapDeserializer;
|
||||||
|
use std::io::Read;
|
||||||
use url::form_urlencoded::Parse as UrlEncodedParse;
|
use url::form_urlencoded::Parse as UrlEncodedParse;
|
||||||
use url::form_urlencoded::parse;
|
use url::form_urlencoded::parse;
|
||||||
|
|
||||||
@ -45,6 +46,19 @@ pub fn from_str<T: de::Deserialize>(input: &str) -> Result<T, Error> {
|
|||||||
from_bytes(input.as_bytes())
|
from_bytes(input.as_bytes())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Convenience function that reads all bytes from `reader` and deserializes
|
||||||
|
/// them with `from_bytes`.
|
||||||
|
pub fn from_reader<T, R>(mut reader: R) -> Result<T, Error>
|
||||||
|
where T: de::Deserialize, R: Read
|
||||||
|
{
|
||||||
|
let mut buf = vec![];
|
||||||
|
reader.read_to_end(&mut buf)
|
||||||
|
.map_err(|e| {
|
||||||
|
de::Error::custom(format_args!("could not read input: {}", e))
|
||||||
|
})?;
|
||||||
|
from_bytes(&buf)
|
||||||
|
}
|
||||||
|
|
||||||
/// A deserializer for the `application/x-www-form-urlencoded` format.
|
/// A deserializer for the `application/x-www-form-urlencoded` format.
|
||||||
///
|
///
|
||||||
/// * Supported top-level outputs are structs, maps and sequences of pairs,
|
/// * Supported top-level outputs are structs, maps and sequences of pairs,
|
||||||
|
@ -11,5 +11,5 @@ extern crate url;
|
|||||||
pub mod de;
|
pub mod de;
|
||||||
pub mod ser;
|
pub mod ser;
|
||||||
|
|
||||||
pub use de::{Deserializer, from_bytes, from_str};
|
pub use de::{Deserializer, from_bytes, from_str, from_reader};
|
||||||
pub use ser::{Serializer, to_string};
|
pub use ser::{Serializer, to_string};
|
||||||
|
25
tests/test_deserialize.rs
Normal file
25
tests/test_deserialize.rs
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
extern crate serde_urlencoded;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn deserialize_bytes() {
|
||||||
|
let result = vec![("first".to_owned(), 23), ("last".to_owned(), 42)];
|
||||||
|
|
||||||
|
assert_eq!(serde_urlencoded::from_bytes(b"first=23&last=42"),
|
||||||
|
Ok(result));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn deserialize_str() {
|
||||||
|
let result = vec![("first".to_owned(), 23), ("last".to_owned(), 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)];
|
||||||
|
|
||||||
|
assert_eq!(serde_urlencoded::from_reader(b"first=23&last=42" as &[_]),
|
||||||
|
Ok(result));
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user