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