diff --git a/src/client.rs b/src/client.rs index 8f20346..fba027a 100644 --- a/src/client.rs +++ b/src/client.rs @@ -7,7 +7,7 @@ use hyper::status::StatusCode; use hyper::version::HttpVersion; use hyper::{Url}; -use serde::Serialize; +use serde::{Deserialize, Serialize}; use serde_json; use serde_urlencoded; @@ -275,6 +275,11 @@ impl Response { pub fn version(&self) -> &HttpVersion { &self.inner.version } + + /// Try and deserialize the response body as JSON. + pub fn json(&mut self) -> ::Result { + serde_json::from_reader(self).map_err(::Error::from) + } } /// Read the body of the Response. diff --git a/src/error.rs b/src/error.rs index e78c13c..1841892 100644 --- a/src/error.rs +++ b/src/error.rs @@ -68,5 +68,11 @@ impl From<::serde_urlencoded::ser::Error> for Error { } } +impl From<::serde_json::Error> for Error { + fn from(err: ::serde_json::Error) -> Error { + Error::Serialize(Box::new(err)) + } +} + /// A `Result` alias where the `Err` case is `reqwest::Error`. pub type Result = ::std::result::Result;