notion_api_rs/notion/
user.rs1use 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}