macro_rules! implement_pagination_v1 { ($t:ty) => { impl $t { async fn follow_link(client : &Client, url : &str) -> Result { 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> { 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> { match self .links .prev .as_ref() .map(|url| Self::follow_link(client, &url)) { Some(data) => Some(data.await), None => None, } } } } }