slack_morphism/models/apps/
manifest.rs1use 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}