Skip to main content

umami_api/admin/
get_users.rs

1use 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  /// Search text
23  pub fn search(mut self, search: impl Into<String>) -> Self {
24    self.search = Some(search.into());
25    self
26  }
27
28  /// Determines page
29  pub fn page(mut self, page: impl Into<u32>) -> Self {
30    self.page_size = Some(page.into());
31    self
32  }
33
34  /// Determines how many results to return
35  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// #[cfg(test)]
59// mod tests {
60//   use super::*;
61//   use std::env;
62//   use dotenv::dotenv;
63//
64//   #[tokio::test]
65//   async fn good() {
66//     dotenv().ok();
67//     let instance = env::var("INSTANCE").expect("INSTANCE has to be set");
68//     let username = env::var("USERNAME").expect("USERNAME has to be set");
69//     let password = env::var("PASSWORD").expect("PASSWORD has to be set");
70//     let api = Umami::new(instance, username, password).await.unwrap();
71//
72//     let users = api.get_users()
73//       .fetch()
74//       .await;
75//
76//     assert!(users.is_ok());
77//     assert!(users.unwrap().len() >= 1);
78//   }
79// }