slack_morphism/models/common/
user.rs1use crate::*;
2use std::collections::HashMap;
3
4use crate::SlackUserId;
5use rsb_derive::Builder;
6use rvstruct::*;
7use serde::{Deserialize, Serialize};
8use serde_with::{serde_as, skip_serializing_none, DisplayFromStr, NoneAsEmptyString};
9
10#[skip_serializing_none]
11#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
12pub struct SlackUser {
13 pub id: SlackUserId,
14 pub team_id: Option<SlackTeamId>,
15 pub name: Option<String>,
16 pub locale: Option<SlackLocale>,
17 pub profile: Option<SlackUserProfile>,
18 #[serde(flatten)]
19 pub flags: SlackUserFlags,
20 pub tz: Option<String>,
21 pub tz_label: Option<String>,
22 pub tz_offset: Option<i32>,
23 pub updated: Option<SlackDateTime>,
24 pub deleted: Option<bool>,
25 pub color: Option<SlackColor>,
26 pub real_name: Option<String>,
27 pub enterprise_user: Option<SlackEnterpriseUser>,
28}
29
30#[serde_as]
31#[skip_serializing_none]
32#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
33pub struct SlackUserProfile {
34 pub id: Option<SlackUserId>,
35 pub display_name: Option<String>,
36 pub real_name: Option<String>,
37 pub real_name_normalized: Option<String>,
38 pub avatar_hash: Option<SlackAvatarHash>,
39 pub status_text: Option<String>,
40 pub status_expiration: Option<SlackDateTime>,
41 pub status_emoji: Option<SlackEmoji>,
42 pub huddle_state: Option<SlackHuddleState>,
43 pub huddle_state_expiration_ts: Option<SlackDateTime>,
44 pub display_name_normalized: Option<String>,
45 pub email: Option<EmailAddress>,
46 #[serde(flatten)]
47 pub icon: Option<SlackIcon>,
48 pub team: Option<SlackTeamId>,
49 pub start_date: Option<SlackDate>,
50 pub first_name: Option<String>,
51 pub last_name: Option<String>,
52 #[serde(default)]
53 #[serde_as(as = "NoneAsEmptyString")]
54 pub phone: Option<PhoneNumber>,
55 pub pronouns: Option<String>,
56 pub title: Option<String>,
57
58 pub fields: Option<HashMap<SlackUserProfileFieldId, SlackUserProfileFieldValue>>,
59}
60
61#[skip_serializing_none]
62#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
63pub struct SlackUserFlags {
64 pub is_admin: Option<bool>,
65 pub is_app_user: Option<bool>,
66 pub is_bot: Option<bool>,
67 pub is_invited_user: Option<bool>,
68 pub is_owner: Option<bool>,
69 pub is_primary_owner: Option<bool>,
70 pub is_restricted: Option<bool>,
71 pub is_stranger: Option<bool>,
72 pub is_ultra_restricted: Option<bool>,
73 pub has_2fa: Option<bool>,
74}
75
76#[skip_serializing_none]
77#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
78pub struct SlackBasicUserInfo {
79 pub id: SlackUserId,
80 pub team_id: Option<SlackTeamId>,
81 pub username: Option<String>,
82 pub name: Option<String>,
83}
84
85#[serde_as]
86#[skip_serializing_none]
87#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
88pub struct SlackUserGroup {
89 pub id: SlackUserGroupId,
90 pub team_id: SlackTeamId,
91 pub enterprise_subteam_id: Option<SlackEnterpriseSubteamId>,
92 pub is_usergroup: Option<bool>,
93 pub is_subteam: Option<bool>,
94 pub name: String,
95 pub description: Option<String>,
96 pub handle: String,
97 pub is_external: bool,
98 pub auto_provision: Option<bool>,
99 pub date_create: SlackDateTime,
100 pub date_update: Option<SlackDateTime>,
101 pub date_delete: Option<SlackDateTime>,
102 pub auto_type: Option<SlackAutoType>,
103 pub created_by: SlackUserId,
104 pub updated_by: Option<SlackUserId>,
105 pub deleted_by: Option<SlackUserId>,
106 pub prefs: SlackUserGroupPrefs,
107 pub users: Option<Vec<SlackUserId>>,
108 pub user_count: usize,
109 pub channel_count: Option<u64>,
110}
111
112#[skip_serializing_none]
113#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
114#[serde(rename_all = "snake_case")]
115pub enum SlackAutoType {
116 Admin,
117 Owner,
118}
119
120#[skip_serializing_none]
121#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
122pub struct SlackUserGroupPrefs {
123 pub channels: Vec<SlackChannelId>,
124 pub groups: Vec<SlackUserGroupId>,
125}
126
127#[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize)]
128#[serde(rename_all = "snake_case")]
129pub enum SlackHuddleState {
130 InAHuddle,
131 DefaultUnset,
132 #[serde(untagged)]
133 Other(String),
134}
135
136#[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)]
137pub struct SlackAvatarHash(pub String);
138
139#[skip_serializing_none]
140#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
141pub struct SlackEnterpriseUser {
142 pub id: SlackUserId,
143 pub enterprise_id: SlackEnterpriseId,
144 pub enterprise_name: Option<String>,
145 #[serde(flatten)]
146 pub flags: SlackUserFlags,
147 pub teams: Option<Vec<SlackTeamId>>,
148}
149
150#[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)]
151pub struct SlackUserProfileFieldId(pub String);
152
153#[serde_as]
154#[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
155pub struct SlackUserProfileFieldValue {
156 pub value: String,
157 #[serde(default)]
158 #[serde_as(as = "NoneAsEmptyString")]
159 pub alt: Option<String>,
160}