|
|
|
@ -36,6 +36,7 @@ |
|
|
|
|
#![cfg_attr(test, deny(missing_docs))] |
|
|
|
|
|
|
|
|
|
#[macro_use] extern crate serde_derive; |
|
|
|
|
#[macro_use] extern crate doc_comment; |
|
|
|
|
#[macro_use] extern crate serde_json as json; |
|
|
|
|
extern crate chrono; |
|
|
|
|
extern crate reqwest; |
|
|
|
@ -92,18 +93,20 @@ macro_rules! methods { |
|
|
|
|
macro_rules! paged_routes { |
|
|
|
|
|
|
|
|
|
(($method:ident) $name:ident: $url:expr => $ret:ty, $($rest:tt)*) => { |
|
|
|
|
/// Equivalent to /api/v1/
|
|
|
|
|
#[doc = $url] |
|
|
|
|
///
|
|
|
|
|
#[doc = "# Errors"] |
|
|
|
|
/// If `access_token` is not set.
|
|
|
|
|
pub fn $name(&self) -> Result<Page<$ret>> { |
|
|
|
|
let url = self.route(concat!("/api/v1/", $url)); |
|
|
|
|
let response = self.client.$method(&url) |
|
|
|
|
.headers(self.headers.clone()) |
|
|
|
|
.send()?; |
|
|
|
|
|
|
|
|
|
Page::new(self, response) |
|
|
|
|
doc_comment! { |
|
|
|
|
concat!( |
|
|
|
|
"Equivalent to `/api/v1/", |
|
|
|
|
$url, |
|
|
|
|
"`\n# Errors\nIf `access_token` is not set."), |
|
|
|
|
pub fn $name(&self) -> Result<Page<$ret>> { |
|
|
|
|
let url = self.route(concat!("/api/v1/", $url)); |
|
|
|
|
let response = self.client.$method(&url) |
|
|
|
|
.headers(self.headers.clone()) |
|
|
|
|
.send()?; |
|
|
|
|
|
|
|
|
|
Page::new(self, response) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
paged_routes!{$($rest)*} |
|
|
|
@ -115,79 +118,83 @@ macro_rules! paged_routes { |
|
|
|
|
macro_rules! route { |
|
|
|
|
|
|
|
|
|
((post multipart ($($param:ident: $typ:ty,)*)) $name:ident: $url:expr => $ret:ty, $($rest:tt)*) => { |
|
|
|
|
/// Equivalent to /api/v1/
|
|
|
|
|
#[doc = $url] |
|
|
|
|
///
|
|
|
|
|
#[doc = "# Errors"] |
|
|
|
|
/// If `access_token` is not set.
|
|
|
|
|
pub fn $name(&self, $($param: $typ,)*) -> Result<$ret> { |
|
|
|
|
use reqwest::multipart::Form; |
|
|
|
|
|
|
|
|
|
let form_data = Form::new() |
|
|
|
|
$( |
|
|
|
|
.file(stringify!($param), $param.as_ref())? |
|
|
|
|
)*; |
|
|
|
|
|
|
|
|
|
let response = self.client.post(&self.route(concat!("/api/v1/", $url))) |
|
|
|
|
.headers(self.headers.clone()) |
|
|
|
|
.multipart(form_data) |
|
|
|
|
.send()?; |
|
|
|
|
|
|
|
|
|
let status = response.status().clone(); |
|
|
|
|
|
|
|
|
|
if status.is_client_error() { |
|
|
|
|
return Err(Error::Client(status)); |
|
|
|
|
} else if status.is_server_error() { |
|
|
|
|
return Err(Error::Server(status)); |
|
|
|
|
} |
|
|
|
|
doc_comment! { |
|
|
|
|
concat!( |
|
|
|
|
"Equivalent to `/api/v1/", |
|
|
|
|
$url, |
|
|
|
|
"`\n# Errors\nIf `access_token` is not set."), |
|
|
|
|
pub fn $name(&self, $($param: $typ,)*) -> Result<$ret> { |
|
|
|
|
use reqwest::multipart::Form; |
|
|
|
|
|
|
|
|
|
let form_data = Form::new() |
|
|
|
|
$( |
|
|
|
|
.file(stringify!($param), $param.as_ref())? |
|
|
|
|
)*; |
|
|
|
|
|
|
|
|
|
let response = self.client.post(&self.route(concat!("/api/v1/", $url))) |
|
|
|
|
.headers(self.headers.clone()) |
|
|
|
|
.multipart(form_data) |
|
|
|
|
.send()?; |
|
|
|
|
|
|
|
|
|
let status = response.status().clone(); |
|
|
|
|
|
|
|
|
|
if status.is_client_error() { |
|
|
|
|
return Err(Error::Client(status)); |
|
|
|
|
} else if status.is_server_error() { |
|
|
|
|
return Err(Error::Server(status)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
deserialise(response) |
|
|
|
|
deserialise(response) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
route!{$($rest)*} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
(($method:ident ($($param:ident: $typ:ty,)*)) $name:ident: $url:expr => $ret:ty, $($rest:tt)*) => { |
|
|
|
|
/// Equivalent to /api/v1/
|
|
|
|
|
#[doc = $url] |
|
|
|
|
///
|
|
|
|
|
#[doc = "# Errors"] |
|
|
|
|
/// If `access_token` is not set.
|
|
|
|
|
pub fn $name(&self, $($param: $typ,)*) -> Result<$ret> { |
|
|
|
|
|
|
|
|
|
let form_data = json!({ |
|
|
|
|
$( |
|
|
|
|
stringify!($param): $param, |
|
|
|
|
)* |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
let response = self.client.$method(&self.route(concat!("/api/v1/", $url))) |
|
|
|
|
.headers(self.headers.clone()) |
|
|
|
|
.json(&form_data) |
|
|
|
|
.send()?; |
|
|
|
|
|
|
|
|
|
let status = response.status().clone(); |
|
|
|
|
|
|
|
|
|
if status.is_client_error() { |
|
|
|
|
return Err(Error::Client(status)); |
|
|
|
|
} else if status.is_server_error() { |
|
|
|
|
return Err(Error::Server(status)); |
|
|
|
|
} |
|
|
|
|
doc_comment! { |
|
|
|
|
concat!( |
|
|
|
|
"Equivalent to `/api/v1/", |
|
|
|
|
$url, |
|
|
|
|
"`\n# Errors\nIf `access_token` is not set."), |
|
|
|
|
|
|
|
|
|
pub fn $name(&self, $($param: $typ,)*) -> Result<$ret> { |
|
|
|
|
|
|
|
|
|
deserialise(response) |
|
|
|
|
let form_data = json!({ |
|
|
|
|
$( |
|
|
|
|
stringify!($param): $param, |
|
|
|
|
)* |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
let response = self.client.$method(&self.route(concat!("/api/v1/", $url))) |
|
|
|
|
.headers(self.headers.clone()) |
|
|
|
|
.json(&form_data) |
|
|
|
|
.send()?; |
|
|
|
|
|
|
|
|
|
let status = response.status().clone(); |
|
|
|
|
|
|
|
|
|
if status.is_client_error() { |
|
|
|
|
return Err(Error::Client(status)); |
|
|
|
|
} else if status.is_server_error() { |
|
|
|
|
return Err(Error::Server(status)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
deserialise(response) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
route!{$($rest)*} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
(($method:ident) $name:ident: $url:expr => $ret:ty, $($rest:tt)*) => { |
|
|
|
|
/// Equivalent to /api/v1/
|
|
|
|
|
#[doc = $url] |
|
|
|
|
///
|
|
|
|
|
#[doc = "# Errors"] |
|
|
|
|
/// If `access_token` is not set.
|
|
|
|
|
pub fn $name(&self) -> Result<$ret> { |
|
|
|
|
self.$method(self.route(concat!("/api/v1/", $url))) |
|
|
|
|
doc_comment! { |
|
|
|
|
concat!( |
|
|
|
|
"Equivalent to `/api/v1/", |
|
|
|
|
$url, |
|
|
|
|
"`\n# Errors\nIf `access_token` is not set."), |
|
|
|
|
pub fn $name(&self) -> Result<$ret> { |
|
|
|
|
self.$method(self.route(concat!("/api/v1/", $url))) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
route!{$($rest)*} |
|
|
|
@ -200,13 +207,14 @@ macro_rules! route_id { |
|
|
|
|
|
|
|
|
|
($(($method:ident) $name:ident: $url:expr => $ret:ty,)*) => { |
|
|
|
|
$( |
|
|
|
|
/// Equivalent to /api/v1/
|
|
|
|
|
#[doc = $url] |
|
|
|
|
///
|
|
|
|
|
#[doc = "# Errors"] |
|
|
|
|
/// If `access_token` is not set.
|
|
|
|
|
pub fn $name(&self, id: u64) -> Result<$ret> { |
|
|
|
|
self.$method(self.route(&format!(concat!("/api/v1/", $url), id))) |
|
|
|
|
doc_comment! { |
|
|
|
|
concat!( |
|
|
|
|
"Equivalent to `/api/v1/", |
|
|
|
|
$url, |
|
|
|
|
"`\n# Errors\nIf `access_token` is not set."), |
|
|
|
|
pub fn $name(&self, id: u64) -> Result<$ret> { |
|
|
|
|
self.$method(self.route(&format!(concat!("/api/v1/", $url), id))) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
)* |
|
|
|
|
} |
|
|
|
@ -215,18 +223,19 @@ macro_rules! route_id { |
|
|
|
|
macro_rules! paged_routes_with_id { |
|
|
|
|
|
|
|
|
|
(($method:ident) $name:ident: $url:expr => $ret:ty, $($rest:tt)*) => { |
|
|
|
|
/// Equivalent to /api/v1/
|
|
|
|
|
#[doc = $url] |
|
|
|
|
///
|
|
|
|
|
#[doc = "# Errors"] |
|
|
|
|
/// If `access_token` is not set.
|
|
|
|
|
pub fn $name(&self, id: &str) -> Result<Page<$ret>> { |
|
|
|
|
let url = self.route(&format!(concat!("/api/v1/", $url), id)); |
|
|
|
|
let response = self.client.$method(&url) |
|
|
|
|
.headers(self.headers.clone()) |
|
|
|
|
.send()?; |
|
|
|
|
|
|
|
|
|
Page::new(self, response) |
|
|
|
|
doc_comment! { |
|
|
|
|
concat!( |
|
|
|
|
"Equivalent to `/api/v1/", |
|
|
|
|
$url, |
|
|
|
|
"`\n# Errors\nIf `access_token` is not set."), |
|
|
|
|
pub fn $name(&self, id: &str) -> Result<Page<$ret>> { |
|
|
|
|
let url = self.route(&format!(concat!("/api/v1/", $url), id)); |
|
|
|
|
let response = self.client.$method(&url) |
|
|
|
|
.headers(self.headers.clone()) |
|
|
|
|
.send()?; |
|
|
|
|
|
|
|
|
|
Page::new(self, response) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
route!{$($rest)*} |
|
|
|
|