0.1.1 page navigation
This commit is contained in:
@@ -194,3 +194,7 @@ impl Client {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------- Page Navigation -----------------
|
||||
|
||||
implement_pagination_v1!(ListAccountsResponse);
|
||||
|
59
src/v1/macros.rs
Normal file
59
src/v1/macros.rs
Normal file
@@ -0,0 +1,59 @@
|
||||
macro_rules! implement_pagination_v1 {
|
||||
($t:ty) => {
|
||||
impl $t {
|
||||
async fn follow_link(client : &Client, url : &str) -> Result<Self, error::Error> {
|
||||
let res = reqwest::Client::new()
|
||||
.get(url)
|
||||
.header("Authorization", client.auth_header())
|
||||
.send()
|
||||
.await
|
||||
.map_err(error::Error::Request)?;
|
||||
|
||||
match res.status() {
|
||||
reqwest::StatusCode::OK => {
|
||||
let body = res.text().await.map_err(error::Error::BodyRead)?;
|
||||
let response : Self = serde_json::from_str(&body).map_err(error::Error::Json)?;
|
||||
|
||||
Ok(response)
|
||||
},
|
||||
_ => {
|
||||
let body = res.text().await.map_err(error::Error::BodyRead)?;
|
||||
let error : error::ErrorResponse = serde_json::from_str(&body).map_err(error::Error::Json)?;
|
||||
|
||||
Err(error::Error::Api(error))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Follows the link to the next page, returns None of the next page does not exist.
|
||||
pub async fn next(&self, client : &Client) -> Option<Result<Self, error::Error>> {
|
||||
match
|
||||
self
|
||||
.links
|
||||
.next
|
||||
.as_ref()
|
||||
.map(|url| Self::follow_link(client, &url)) {
|
||||
|
||||
Some(data) => Some(data.await),
|
||||
None => None,
|
||||
}
|
||||
}
|
||||
|
||||
/// Follows the link to the previous page, returns None of the previous page does not exist.
|
||||
pub async fn prev(&self, client : &Client) -> Option<Result<Self, error::Error>> {
|
||||
match
|
||||
self
|
||||
.links
|
||||
.prev
|
||||
.as_ref()
|
||||
.map(|url| Self::follow_link(client, &url)) {
|
||||
|
||||
Some(data) => Some(data.await),
|
||||
None => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -1,3 +1,6 @@
|
||||
#[macro_use]
|
||||
mod macros;
|
||||
|
||||
/// Error types and trait implementations.
|
||||
pub mod error;
|
||||
/// Types for modelling and interacting with [accounts](https://developer.up.com.au/#accounts).
|
||||
@@ -13,6 +16,7 @@ pub mod utilities;
|
||||
/// Types which are stardized (and named) across many resources.
|
||||
pub mod standard;
|
||||
|
||||
|
||||
static BASE_URL : &str = "https://api.up.com.au/api/v1";
|
||||
|
||||
/// A client for interacting with the Up API.
|
||||
|
@@ -194,3 +194,6 @@ impl Client {
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------- Page Navigation -----------------
|
||||
|
||||
implement_pagination_v1!(ListTagsResponse);
|
||||
|
@@ -378,3 +378,8 @@ impl Client {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ----------------- Page Navigation -----------------
|
||||
|
||||
implement_pagination_v1!(ListTransactionsResponse);
|
||||
|
Reference in New Issue
Block a user