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 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
use chrono::serde::ts_seconds; use chrono::{DateTime, TimeZone, Utc}; use rsb_derive::Builder; use rvstruct::ValueStruct; use serde::{Deserialize, Serialize}; use serde_with::skip_serializing_none; use std::hash::Hash; use std::*; mod user; pub use user::*; mod team; pub use team::*; mod channel; pub use channel::*; mod bot; pub use bot::*; mod icon; pub use icon::*; mod formatters; pub use formatters::*; #[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)] pub struct SlackTs(pub String); impl SlackTs { pub fn to_date_time(&self) -> Result<DateTime<Utc>, num::ParseIntError> { let parts: Vec<&str> = self.value().split('.').collect(); let ts_int: i64 = parts[0].parse()?; Ok(Utc.timestamp_millis(ts_int * 1000)) } } #[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)] pub struct SlackScheduledMid(pub String); #[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)] pub struct SlackTeamId(pub String); #[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)] pub struct SlackAppId(pub String); #[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)] pub struct SlackChannelId(pub String); #[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)] pub struct SlackChannelType(pub String); #[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)] pub struct SlackConversationId(pub String); #[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)] pub struct SlackActionId(pub String); #[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)] pub struct SlackActionType(pub String); #[derive(Debug, Eq, Hash, PartialEq, Clone, Serialize, Deserialize, ValueStruct)] pub struct SlackUserId(pub String); impl SlackTextFormat for SlackUserId { fn to_slack_format(&self) -> String { format!("<@{}>", self.value()) } } #[derive(Debug, Eq, Hash, PartialEq, Clone, Serialize, Deserialize, ValueStruct)] pub struct SlackBotId(pub String); #[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)] pub struct SlackDateTime(#[serde(with = "ts_seconds")] pub DateTime<Utc>); #[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)] pub struct SlackLocale(pub String); #[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)] pub struct SlackCursorId(pub String); #[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)] pub struct SlackColor(pub String); #[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)] pub struct SlackCallbackId(pub String); #[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)] pub struct SlackTriggerId(pub String); #[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)] pub struct SlackViewId(pub String); #[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)] pub struct SlackCommandId(pub String); #[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)] pub struct SlackClientId(pub String); #[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)] pub struct SlackClientSecret(pub String); #[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, ValueStruct)] pub struct EmailAddress(pub String); #[skip_serializing_none] #[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)] pub struct SlackResponseMetadata { #[serde(with = "serde_with::rust::string_empty_as_none")] pub next_cursor: Option<SlackCursorId>, } #[derive(Debug, PartialEq, Serialize, Deserialize, Clone)] pub enum SlackConversationType { #[serde(rename = "im")] Im, #[serde(rename = "mpim")] Mpim, #[serde(rename = "private_channel")] Private, #[serde(rename = "public_channel")] Public, } impl ToString for SlackConversationType { fn to_string(&self) -> String { match self { SlackConversationType::Im => "im".into(), SlackConversationType::Mpim => "mpim".into(), SlackConversationType::Private => "private_channel".into(), SlackConversationType::Public => "public_channel".into(), } } }