Skip to main content

plexus_comms/activations/slack/
types.rs

1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4// Request types
5#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
6pub struct SendMessageParams {
7    pub channel: String,
8    pub text: String,
9    #[serde(skip_serializing_if = "Option::is_none")]
10    pub thread_ts: Option<String>,
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub attachments: Option<Vec<serde_json::Value>>,
13}
14
15#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
16pub struct CreateChannelParams {
17    pub name: String,
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub is_private: Option<bool>,
20}
21
22// Response/Event types
23#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
24#[serde(tag = "type", rename_all = "snake_case")]
25pub enum SendMessageEvent {
26    Sent {
27        ts: String,
28        channel: String,
29    },
30    Error {
31        message: String,
32        code: Option<String>,
33    },
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
37#[serde(tag = "type", rename_all = "snake_case")]
38pub enum ChannelEvent {
39    Created {
40        channel_id: String,
41        name: String,
42    },
43    Error {
44        message: String,
45    },
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
49#[serde(tag = "type", rename_all = "snake_case")]
50pub enum SlackEvent {
51    Message {
52        ts: String,
53        channel: String,
54        user: String,
55        text: String,
56    },
57    Reaction {
58        reaction: String,
59        user: String,
60        item_ts: String,
61    },
62    Error {
63        message: String,
64    },
65}