1mod api;
5pub mod id;
6mod tests;
7
8use crate::user::id::UserId;
9use serde::{Deserialize, Serialize};
10
11#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq)]
12pub struct UserCommon {
13 pub id: UserId,
14 pub name: Option<String>,
15 pub avatar_url: Option<String>,
16}
17
18#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq)]
19pub struct Person {
20 pub email: String,
21}
22
23#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq)]
24pub struct Bot {
25 pub owner: Owner,
26 pub workspace_name: String,
27}
28
29#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq)]
30pub struct Owner {
31 #[serde(rename = "type")]
32 pub owner_type: String,
33 pub workspace: bool,
34}
35
36#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq)]
37#[serde(tag = "type", rename_all = "snake_case")]
38pub enum User {
39 Person {
40 #[serde(flatten)]
41 common: UserCommon,
42 person: Person,
43 },
44 Bot {
45 #[serde(flatten)]
46 common: UserCommon,
47 bot: Bot,
48 },
49}