slack_morphism_models/common/
channel.rs

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