use reqwest::Method;
use crate::error::Result;
use crate::http::HttpClient;
use crate::models::Activity;
use crate::pagination::Page;
#[derive(Debug, Clone)]
pub struct ListActivitiesRequest<'a> {
http: &'a HttpClient,
document_id: String,
page: Option<u32>,
per_page: Option<u32>,
sort: Option<String>,
}
impl<'a> ListActivitiesRequest<'a> {
pub fn page(mut self, page: u32) -> Self {
self.page = Some(page);
self
}
pub fn per_page(mut self, per_page: u32) -> Self {
self.per_page = Some(per_page);
self
}
pub fn sort<S: Into<String>>(mut self, sort: S) -> Self {
self.sort = Some(sort.into());
self
}
pub async fn send(self) -> Result<Page<Activity>> {
let path = format!("documents/{}/activities", self.document_id);
let mut req = self.http.request(Method::GET, &path)?;
let mut q: Vec<(&str, String)> = Vec::new();
if let Some(v) = self.page {
q.push(("page", v.to_string()));
}
if let Some(v) = self.per_page {
q.push(("per-page", v.to_string()));
}
if let Some(v) = self.sort {
q.push(("sort", v));
}
if !q.is_empty() {
req = req.query(&q);
}
self.http.send_paged(req).await
}
}
#[derive(Debug)]
pub struct ActivitiesApi<'a> {
http: &'a HttpClient,
}
impl<'a> ActivitiesApi<'a> {
pub(crate) fn new(http: &'a HttpClient) -> Self {
Self { http }
}
pub fn list<S: Into<String>>(&self, document_id: S) -> ListActivitiesRequest<'_> {
ListActivitiesRequest {
http: self.http,
document_id: document_id.into(),
page: None,
per_page: None,
sort: None,
}
}
}