|  |  |  | @ -50,6 +50,7 @@ pub mod entities; | 
			
		
	
		
			
				
					|  |  |  |  | pub mod registration; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | use std::ops; | 
			
		
	
		
			
				
					|  |  |  |  | use std::io::Error as IoError; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | use json::Error as SerdeError; | 
			
		
	
		
			
				
					|  |  |  |  | use reqwest::Error as HttpError; | 
			
		
	
	
		
			
				
					|  |  |  | @ -57,7 +58,7 @@ use reqwest::Client; | 
			
		
	
		
			
				
					|  |  |  |  | use reqwest::header::{Authorization, Bearer, Headers}; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | use entities::prelude::*; | 
			
		
	
		
			
				
					|  |  |  |  | use status_builder::StatusBuilder; | 
			
		
	
		
			
				
					|  |  |  |  | pub use status_builder::StatusBuilder; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | pub use registration::Registration; | 
			
		
	
		
			
				
					|  |  |  |  | pub type Result<T> = std::result::Result<T, Error>; | 
			
		
	
	
		
			
				
					|  |  |  | @ -72,11 +73,7 @@ macro_rules! methods { | 
			
		
	
		
			
				
					|  |  |  |  |                    .headers(self.headers.clone()) | 
			
		
	
		
			
				
					|  |  |  |  |                    .send()?; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |                 if let Ok(t) = response.json::<T>() { | 
			
		
	
		
			
				
					|  |  |  |  |                     Ok(t) | 
			
		
	
		
			
				
					|  |  |  |  |                 } else { | 
			
		
	
		
			
				
					|  |  |  |  |                     Err(Error::Api(response.json()?)) | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  |                 response.json()? | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |          )+ | 
			
		
	
		
			
				
					|  |  |  |  |     }; | 
			
		
	
	
		
			
				
					|  |  |  | @ -92,6 +89,7 @@ macro_rules! route { | 
			
		
	
		
			
				
					|  |  |  |  |         #[doc = "# Errors"] | 
			
		
	
		
			
				
					|  |  |  |  |         /// If `access_token` is not set.
 | 
			
		
	
		
			
				
					|  |  |  |  |         pub fn $name(&self, $($param: $typ,)*) -> Result<$ret> { | 
			
		
	
		
			
				
					|  |  |  |  |             use std::io::Read; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             let form_data = json!({ | 
			
		
	
		
			
				
					|  |  |  |  |                 $( | 
			
		
	
	
		
			
				
					|  |  |  | @ -104,11 +102,11 @@ macro_rules! route { | 
			
		
	
		
			
				
					|  |  |  |  |                                           .form(&form_data) | 
			
		
	
		
			
				
					|  |  |  |  |                                           .send()?; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             if let Ok(t) = response.json::<$ret>() { | 
			
		
	
		
			
				
					|  |  |  |  |                 Ok(t) | 
			
		
	
		
			
				
					|  |  |  |  |             } else { | 
			
		
	
		
			
				
					|  |  |  |  |                 Err(Error::Api(response.json()?)) | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |             let mut vec = Vec::new(); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             response.read_to_end(&mut vec)?; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             json::from_slice(&vec)? | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         route!{$($rest)*} | 
			
		
	
		
			
				
					|  |  |  |  |     }; | 
			
		
	
	
		
			
				
					|  |  |  | @ -167,13 +165,21 @@ pub struct Data { | 
			
		
	
		
			
				
					|  |  |  |  |     pub token: String, | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #[derive(Debug)] | 
			
		
	
		
			
				
					|  |  |  |  | #[derive(Debug, Deserialize)] | 
			
		
	
		
			
				
					|  |  |  |  | #[serde(untagged)] | 
			
		
	
		
			
				
					|  |  |  |  | pub enum Error { | 
			
		
	
		
			
				
					|  |  |  |  |     Api(ApiError), | 
			
		
	
		
			
				
					|  |  |  |  |     #[serde(skip_deserializing)] | 
			
		
	
		
			
				
					|  |  |  |  |     Serde(SerdeError), | 
			
		
	
		
			
				
					|  |  |  |  |     #[serde(skip_deserializing)] | 
			
		
	
		
			
				
					|  |  |  |  |     Http(HttpError), | 
			
		
	
		
			
				
					|  |  |  |  |     #[serde(skip_deserializing)] | 
			
		
	
		
			
				
					|  |  |  |  |     Io(IoError), | 
			
		
	
		
			
				
					|  |  |  |  |     #[serde(skip_deserializing)] | 
			
		
	
		
			
				
					|  |  |  |  |     ClientIdRequired, | 
			
		
	
		
			
				
					|  |  |  |  |     #[serde(skip_deserializing)] | 
			
		
	
		
			
				
					|  |  |  |  |     ClientSecretRequired, | 
			
		
	
		
			
				
					|  |  |  |  |     #[serde(skip_deserializing)] | 
			
		
	
		
			
				
					|  |  |  |  |     AccessTokenRequired, | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -183,7 +189,7 @@ pub struct ApiError { | 
			
		
	
		
			
				
					|  |  |  |  |     /// The type of error.
 | 
			
		
	
		
			
				
					|  |  |  |  |     pub error: String, | 
			
		
	
		
			
				
					|  |  |  |  |     /// The description of the error.
 | 
			
		
	
		
			
				
					|  |  |  |  |     pub error_description: String, | 
			
		
	
		
			
				
					|  |  |  |  |     pub error_description: Option<String>, | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | impl Mastodon { | 
			
		
	
	
		
			
				
					|  |  |  | @ -242,7 +248,6 @@ impl Mastodon { | 
			
		
	
		
			
				
					|  |  |  |  |         (post (account_id: u64, status_ids: Vec<u64>, comment: String,)) report: | 
			
		
	
		
			
				
					|  |  |  |  |             "reports" => Report, | 
			
		
	
		
			
				
					|  |  |  |  |         (post (q: String, resolve: bool,)) search: "search" => SearchResult, | 
			
		
	
		
			
				
					|  |  |  |  |         (post (status: StatusBuilder,)) new_status: "statuses" => Status, | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     route_id! { | 
			
		
	
	
		
			
				
					|  |  |  | @ -268,6 +273,25 @@ impl Mastodon { | 
			
		
	
		
			
				
					|  |  |  |  |         (delete) delete_status: "statuses/{}" => Empty, | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     pub fn new_status(&self, status: StatusBuilder) -> Result<Status> { | 
			
		
	
		
			
				
					|  |  |  |  |         use std::io::Read; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         let mut response = self.client.post(&self.route("/api/v1/statuses")) | 
			
		
	
		
			
				
					|  |  |  |  |             .headers(self.headers.clone()) | 
			
		
	
		
			
				
					|  |  |  |  |             .json(&status) | 
			
		
	
		
			
				
					|  |  |  |  |             .send().expect("STAUS BUILDER IS BAD"); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         let mut vec = Vec::new(); | 
			
		
	
		
			
				
					|  |  |  |  |         response.read_to_end(&mut vec)?; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         if let Ok(t) = json::from_slice(&vec) { | 
			
		
	
		
			
				
					|  |  |  |  |             Ok(t) | 
			
		
	
		
			
				
					|  |  |  |  |         } else { | 
			
		
	
		
			
				
					|  |  |  |  |             Err(Error::Api(json::from_slice(&vec)?)) | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     pub fn get_public_timeline(&self, local: bool) -> Result<Vec<Status>> { | 
			
		
	
		
			
				
					|  |  |  |  |         let mut url = self.route("/api/v1/timelines/public"); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -372,4 +396,5 @@ macro_rules! from { | 
			
		
	
		
			
				
					|  |  |  |  | from! { | 
			
		
	
		
			
				
					|  |  |  |  |     SerdeError, Serde, | 
			
		
	
		
			
				
					|  |  |  |  |     HttpError, Http, | 
			
		
	
		
			
				
					|  |  |  |  |     IoError, Io, | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
	
		
			
				
					|  |  |  | 
 |