slack_morphism/models/common/
channel.rs

1use 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);