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 display_name_normalized: Option<String>,
43 pub email: Option<EmailAddress>,
44 #[serde(flatten)]
45 pub icon: Option<SlackIcon>,
46 pub team: Option<SlackTeamId>,
47 pub start_date: Option<SlackDate>,
48 pub first_name: Option<String>,
49 pub last_name: Option<String>,
50 #[serde(default)]
51 #[serde_as(as = "NoneAsEmptyString")]
52 pub phone: Option<PhoneNumber>,
53 pub pronouns: Option<String>,
54 pub title: Option<String>,
55
56 pub fields: Option<HashMap<SlackUserProfileFieldId, SlackUserProfileFieldValue>>,
57}
58
59#[skip_serializing_none]
60#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
61pub struct SlackUserFlags {
62 pub is_admin: Option<bool>,
63 pub is_app_user: Option<bool>,
64 pub is_bot: Option<bool>,
65 pub is_invited_user: Option<bool>,
66 pub is_owner: Option<bool>,
67 pub is_primary_owner: Option<bool>,
68 pub is_restricted: Option<bool>,
69 pub is_stranger: Option<bool>,
70 pub is_ultra_restricted: Option<bool>,
71 pub has_2fa: Option<bool>,
72}
73
74#[skip_serializing_none]
75#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
76pub struct SlackBasicUserInfo {
77 pub id: SlackUserId,
78 pub team_id: Option<SlackTeamId>,
79 pub username: Option<String>,
80 pub name: Option<String>,
81}
82
83#[serde_as]
84#[skip_serializing_none]
85#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
86pub struct SlackUserGroup {
87 pub id: SlackUserGroupId,
88 pub team_id: SlackTeamId,
89 pub enterprise_subteam_id: Option<SlackEnterpriseSubteamId>,
90 pub is_usergroup: Option<bool>,
91 pub is_subteam: Option<bool>,
92 pub name: String,
93 pub description: Option<String>,
94 pub handle: String,
95 pub is_external: bool,
96 pub auto_provision: Option<bool>,
97 pub date_create: SlackDateTime,
98 pub date_update: Option<SlackDateTime>,
99 pub date_delete: Option<SlackDateTime>,
100 pub auto_type: Option<SlackAutoType>,
101 pub created_by: SlackUserId,
102 pub updated_by: Option<SlackUserId>,
103 pub deleted_by: Option<SlackUserId>,
104 pub prefs: SlackUserGroupPrefs,
105 pub users: Option<Vec<SlackUserId>>,
106 pub user_count: usize,
107 pub channel_count: Option<u64>,
108}
109
110#[skip_serializing_none]
111#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
112#[serde(rename_all = "snake_case")]
113pub enum SlackAutoType {
114 Admin,
115 Owner,
116}
117
118#[skip_serializing_none]
119#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
120pub struct SlackUserGroupPrefs {
121 pub channels: Vec<SlackChannelId>,
122 pub groups: Vec<SlackUserGroupId>,
123}
124
125#[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)]
126pub struct SlackAvatarHash(pub String);
127
128#[skip_serializing_none]
129#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
130pub struct SlackEnterpriseUser {
131 pub id: SlackUserId,
132 pub enterprise_id: SlackEnterpriseId,
133 pub enterprise_name: Option<String>,
134 #[serde(flatten)]
135 pub flags: SlackUserFlags,
136 pub teams: Option<Vec<SlackTeamId>>,
137}
138
139#[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)]
140pub struct SlackUserProfileFieldId(pub String);
141
142#[serde_as]
143#[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
144pub struct SlackUserProfileFieldValue {
145 pub value: String,
146 #[serde(default)]
147 #[serde_as(as = "NoneAsEmptyString")]
148 pub alt: Option<String>,
149}