umami_api/admin/
get_users.rs1use serde::Deserialize;
2
3use crate::{Umami, UmamiError, users::DetailedUser};
4
5#[derive(Clone, Debug, Deserialize)]
6struct OriginalResponse {
7 data: Vec<DetailedUser>,
8}
9
10pub struct GetUsersRequestBuilder<'a> {
11 client: &'a Umami,
12 search: Option<String>,
13 page: Option<u32>,
14 page_size: Option<u32>,
15}
16
17impl<'a> GetUsersRequestBuilder<'a> {
18 pub fn new(client: &'a Umami) -> Self {
19 Self { client, search: None, page: None, page_size: None }
20 }
21
22 pub fn search(mut self, search: impl Into<String>) -> Self {
24 self.search = Some(search.into());
25 self
26 }
27
28 pub fn page(mut self, page: impl Into<u32>) -> Self {
30 self.page_size = Some(page.into());
31 self
32 }
33
34 pub fn page_size(mut self, page_size: impl Into<u32>) -> Self {
36 self.page_size = Some(page_size.into());
37 self
38 }
39
40 pub async fn fetch(self) -> Result<Vec<DetailedUser>, UmamiError> {
41 let mut parameters: Vec<(&str, String)> = vec![];
42
43 if let Some(search) = self.search {
44 parameters.extend(vec![("search", search)]);
45 }
46 if let Some(page) = self.page {
47 parameters.extend(vec![("page", page.to_string())]);
48 }
49 if let Some(page_size) = self.page_size {
50 parameters.extend(vec![("pageSize", page_size.to_string())]);
51 }
52
53 let response = self.client.request::<OriginalResponse, _>("get", "admin/users", parameters).await?;
54 Ok(response.data)
55 }
56}
57
58