notion_api_rs/notion/
user.rs

1use super::client::Client;
2use serde::{Deserialize, Serialize};
3use anyhow::Result;
4
5#[derive(Debug, Serialize, Deserialize)]
6pub struct ListUsersResponse {
7    object: String,
8    results: Vec<User>,
9    next_cursor: Option<String>,
10    has_more: bool,
11}
12
13#[derive(Debug, Serialize, Deserialize)]
14pub struct User {
15    pub object: String,
16    pub id: String,
17    pub name: Option<String>,
18    pub avatar_url: Option<String>,
19    #[serde(rename = "type")]
20    pub user_type: Option<String>,
21    pub person: Option<Person>,
22    pub bot: Option<Bot>,
23}
24
25#[derive(Debug, Serialize, Deserialize)]
26pub struct Bot {
27    pub owner: Option<Owner>,
28}
29
30#[derive(Debug, Serialize, Deserialize)]
31pub struct Owner {
32    #[serde(rename = "type")]
33    pub owner_type: String,
34    pub workspace: Option<bool>,
35    pub user: Box<Option<User>>,
36}
37
38#[derive(Debug, Serialize, Deserialize)]
39pub struct Person {
40    pub email: String
41}
42
43impl Client {
44    pub async fn list_users(&self) -> Result<Vec<User>> {
45        let url = format!("{}/users", self.base_api);
46        let resp = self.client.get(url).send().await?;
47        let data = resp.json::<ListUsersResponse>().await?;
48        Ok(data.results)
49    }
50
51    pub async fn get_user(&self, id: String) -> Result<User> {
52        let url = format!("{}/users/{}", self.base_api, id);
53        let resp = self.client.get(url).send().await?;
54        let user = resp.json::<User>().await?;
55        Ok(user)
56    }
57
58    pub async fn me(&self) -> Result<User> {
59        self.get_user(String::from("me")).await
60    }
61}