use serde::Deserialize;
use crate::{Umami, UmamiError, websites::WebsiteWithUserTeam};
#[derive(Clone, Debug, Deserialize)]
struct OriginalResponse {
data: Vec<WebsiteWithUserTeam>,
}
pub struct GetWebsitesRequestBuilder<'a> {
client: &'a Umami,
search: Option<String>,
page: Option<u32>,
page_size: Option<u32>,
}
impl<'a> GetWebsitesRequestBuilder<'a> {
pub fn new(client: &'a Umami) -> Self {
Self { client, search: None, page: None, page_size: None }
}
pub fn search(mut self, search: impl Into<String>) -> Self {
self.search = Some(search.into());
self
}
pub fn page(mut self, page: impl Into<u32>) -> Self {
self.page_size = Some(page.into());
self
}
pub fn page_size(mut self, page_size: impl Into<u32>) -> Self {
self.page_size = Some(page_size.into());
self
}
pub async fn fetch(self) -> Result<Vec<WebsiteWithUserTeam>, UmamiError> {
let mut parameters: Vec<(&str, String)> = vec![];
if let Some(search) = self.search {
parameters.extend(vec![("search", search)]);
}
if let Some(page) = self.page {
parameters.extend(vec![("page", page.to_string())]);
}
if let Some(page_size) = self.page_size {
parameters.extend(vec![("pageSize", page_size.to_string())]);
}
let response = self.client.request::<OriginalResponse, _>("get", "admin/websites", parameters).await?;
Ok(response.data)
}
}