notion_client/endpoints/users/
list.rs

1use crate::{endpoints::NOTION_URI, objects::Response, NotionClientError};
2
3pub mod response;
4
5use self::response::ListAllUsersResponse;
6
7use super::UsersEndpoint;
8
9impl UsersEndpoint {
10    pub async fn list_all_users(
11        &self,
12        start_cursor: Option<&str>,
13        page_size: Option<u32>,
14    ) -> Result<ListAllUsersResponse, NotionClientError> {
15        let mut query = vec![];
16        if let Some(start_cursor) = start_cursor {
17            query.insert(0, ("start_cursor", start_cursor));
18        }
19        let page_size = page_size.map(|p| p.to_string());
20        if let Some(page_size) = &page_size {
21            query.insert(0, ("page_size", page_size));
22        }
23
24        let result = self
25            .client
26            .get(format!("{notion_uri}/users", notion_uri = NOTION_URI,))
27            .query(&query)
28            .send()
29            .await
30            .map_err(|e| NotionClientError::FailedToRequest { source: e })?;
31
32        let body = result
33            .text()
34            .await
35            .map_err(|e| NotionClientError::FailedToText { source: e })?;
36
37        let response = serde_json::from_str(&body)
38            .map_err(|e| NotionClientError::FailedToDeserialize { source: e, body })?;
39
40        match response {
41            Response::Success(r) => Ok(r),
42            Response::Error(e) => Err(NotionClientError::InvalidStatusCode { error: e }),
43        }
44    }
45}