slack_morphism/models/apps/
manifest.rs

1use rsb_derive::Builder;
2use serde::{Deserialize, Serialize};
3use serde_with::skip_serializing_none;
4use url::Url;
5
6use crate::{SlackApiTokenScope, SlackCallbackId, SlackEventType, SlackShortcutType};
7
8#[skip_serializing_none]
9#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
10pub struct SlackAppManifestMetadata {
11    pub major_version: Option<usize>,
12    pub minor_version: Option<usize>,
13}
14
15#[skip_serializing_none]
16#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
17pub struct SlackAppManifestDisplayInformation {
18    pub name: String,
19    pub description: Option<String>,
20    pub background_color: Option<String>,
21    pub long_description: Option<String>,
22}
23
24#[skip_serializing_none]
25#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
26pub struct SlackAppManifestSettingsEventSubscriptions {
27    pub request_url: Option<Url>,
28    pub bot_events: Option<Vec<SlackEventType>>,
29    pub user_events: Option<Vec<SlackEventType>>,
30}
31
32#[skip_serializing_none]
33#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
34pub struct SlackAppManifestSettingsInteractivity {
35    pub is_enabled: bool,
36    pub request_url: Option<Url>,
37    pub message_menu_options_url: Option<Url>,
38}
39
40#[skip_serializing_none]
41#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
42pub struct SlackAppManifestSettings {
43    pub allowed_ip_address_ranges: Option<Vec<String>>,
44    pub event_subscriptions: Option<SlackAppManifestSettingsEventSubscriptions>,
45    pub interactivity: Option<SlackAppManifestSettingsInteractivity>,
46    pub org_deploy_enabled: Option<bool>,
47    pub socket_mode_enabled: Option<bool>,
48}
49
50#[skip_serializing_none]
51#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
52pub struct SlackAppManifestFeaturesAppHome {
53    pub home_tab_enabled: Option<bool>,
54    pub messages_tab_enabled: Option<bool>,
55    pub messages_tab_read_only_enabled: Option<bool>,
56}
57
58#[skip_serializing_none]
59#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
60pub struct SlackAppManifestFeaturesBotUser {
61    pub display_name: String,
62    pub always_online: bool,
63}
64
65#[skip_serializing_none]
66#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
67pub struct SlackAppManifestFeaturesShortcut {
68    pub name: String,
69    pub callback_id: SlackCallbackId,
70    pub description: String,
71    #[serde(rename = "type")]
72    pub ty: SlackShortcutType,
73}
74
75#[skip_serializing_none]
76#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
77pub struct SlackAppManifestFeaturesSlashCommand {
78    pub command: String,
79    pub description: String,
80    pub should_escape: Option<bool>,
81    pub url: Option<Url>,
82    pub usage_hint: Option<String>,
83}
84
85#[skip_serializing_none]
86#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
87pub struct SlackAppManifestFeaturesWorkflowStep {
88    pub name: String,
89    pub callback_id: SlackCallbackId,
90}
91
92#[skip_serializing_none]
93#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
94pub struct SlackAppManifestFeatures {
95    pub app_home: Option<SlackAppManifestFeaturesAppHome>,
96    pub bot_user: Option<SlackAppManifestFeaturesBotUser>,
97    pub shortcuts: Option<Vec<SlackAppManifestFeaturesShortcut>>,
98    pub slash_commands: Option<Vec<SlackAppManifestFeaturesSlashCommand>>,
99    pub unfurl_domains: Option<Vec<String>>,
100    pub workflow_steps: Option<Vec<SlackAppManifestFeaturesWorkflowStep>>,
101}
102
103#[skip_serializing_none]
104#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
105pub struct SlackAppManifestOAuthConfigScopes {
106    pub bot: Option<Vec<SlackApiTokenScope>>,
107    pub user: Option<Vec<SlackApiTokenScope>>,
108}
109
110#[skip_serializing_none]
111#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
112pub struct SlackAppManifestOAuthConfig {
113    pub redirect_urls: Option<Vec<Url>>,
114    pub scopes: Option<SlackAppManifestOAuthConfigScopes>,
115}
116
117#[skip_serializing_none]
118#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Builder)]
119pub struct SlackAppManifest {
120    #[serde(rename = "_metadata")]
121    pub metadata: Option<SlackAppManifestMetadata>,
122    pub display_information: SlackAppManifestDisplayInformation,
123    pub settings: Option<SlackAppManifestSettings>,
124    pub features: Option<SlackAppManifestFeatures>,
125    pub oauth_config: Option<SlackAppManifestOAuthConfig>,
126}