slack_morphism/models/common/
channel.rs1use crate::*;
2
3use rsb_derive::Builder;
4use rvstruct::*;
5use serde::{Deserialize, Serialize};
6use serde_with::skip_serializing_none;
7
8pub trait HasChannelInfo {
9 fn get_channel_id(&self) -> &SlackChannelId;
10}
11
12#[skip_serializing_none]
13#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
14pub struct SlackChannelInfo {
15 pub id: SlackChannelId,
16 pub created: SlackDateTime,
17 pub creator: Option<SlackUserId>,
18 pub name: Option<String>,
19 pub name_normalized: Option<String>,
20 pub topic: Option<SlackChannelTopicInfo>,
21 pub purpose: Option<SlackChannelPurposeInfo>,
22 pub previous_names: Option<Vec<String>>,
23 pub priority: Option<SlackChannelPriority>,
24 pub num_members: Option<u64>,
25 pub locale: Option<SlackLocale>,
26 #[serde(flatten)]
27 pub flags: SlackChannelFlags,
28 #[serde(flatten)]
29 pub last_state: SlackChannelCurrentState,
30}
31
32impl HasChannelInfo for SlackChannelInfo {
33 fn get_channel_id(&self) -> &SlackChannelId {
34 &self.id
35 }
36}
37
38pub type SlackChannelTopicInfo = SlackChannelDetails;
39pub type SlackChannelPurposeInfo = SlackChannelDetails;
40
41#[skip_serializing_none]
42#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
43pub struct SlackChannelDetails {
44 pub value: String,
45 pub creator: Option<SlackUserId>,
46 pub last_set: Option<SlackDateTime>,
47}
48
49#[skip_serializing_none]
50#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
51pub struct SlackChannelFlags {
52 pub is_channel: Option<bool>,
53 pub is_group: Option<bool>,
54 pub is_im: Option<bool>,
55 pub is_archived: Option<bool>,
56 pub is_general: Option<bool>,
57 pub is_shared: Option<bool>,
58 pub is_org_shared: Option<bool>,
59 pub is_member: Option<bool>,
60 pub is_private: Option<bool>,
61 pub is_mpim: Option<bool>,
62 pub is_user_deleted: Option<bool>,
63}
64
65#[skip_serializing_none]
66#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
67pub struct SlackChannelCurrentState {
68 pub last_read: Option<SlackTs>,
69 pub unread_count: Option<u64>,
70 pub unread_count_display: Option<u64>,
71}
72
73#[skip_serializing_none]
74#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
75pub struct SlackBasicChannelInfo {
76 pub id: SlackChannelId,
77 pub name: Option<String>,
78}
79
80impl HasChannelInfo for SlackBasicChannelInfo {
81 fn get_channel_id(&self) -> &SlackChannelId {
82 &self.id
83 }
84}
85
86#[derive(Debug, PartialEq, PartialOrd, Clone, Serialize, Deserialize, ValueStruct)]
87pub struct SlackChannelPriority(pub f64);