diff --git a/Cargo.toml b/Cargo.toml index 2e6c4b1..09404d7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mammut" -version = "0.6.0" +version = "0.6.1" description = "A wrapper around the Mastodon API." authors = ["Aaron Power "] license = "MIT/Apache-2.0" diff --git a/src/lib.rs b/src/lib.rs index eb98d84..812696b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -69,11 +69,20 @@ macro_rules! methods { fn $method(&self, url: String) -> Result { + use std::io::Read; + let mut response = self.client.$method(&url) - .headers(self.headers.clone()) - .send()?; + .headers(self.headers.clone()) + .send()?; + + let mut vec = Vec::new(); + response.read_to_end(&mut vec)?; - response.json()? + if let Ok(t) = json::from_slice(&vec) { + Ok(t) + } else { + Err(Error::Api(json::from_slice(&vec)?)) + } } )+ }; @@ -94,19 +103,23 @@ macro_rules! route { let form_data = json!({ $( stringify!($param): $param, - )* + )* }); let mut response = self.client.post(&self.route(concat!("/api/v1/", $url))) - .headers(self.headers.clone()) - .form(&form_data) - .send()?; + .headers(self.headers.clone()) + .form(&form_data) + .send()?; let mut vec = Vec::new(); response.read_to_end(&mut vec)?; - json::from_slice(&vec)? + if let Ok(t) = json::from_slice(&vec) { + Ok(t) + } else { + Err(Error::Api(json::from_slice(&vec)?)) + } } route!{$($rest)*} }; @@ -279,8 +292,7 @@ impl Mastodon { let mut response = self.client.post(&self.route("/api/v1/statuses")) .headers(self.headers.clone()) .json(&status) - .send().expect("STAUS BUILDER IS BAD"); - + .send()?; let mut vec = Vec::new(); response.read_to_end(&mut vec)?;