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