Skip to main content

slack_web_api/api/
admin_functions.rs

1// このファイルは codegen/generate.py が生成する。手で編集しない
2
3#![allow(unused_imports)]
4
5use crate::objects::*;
6use crate::{
7    CursorPaginated, NextCursor, ResponseMetadata, SlackApiMethod, SlackClient, SlackError,
8};
9use serde::{Deserialize, Serialize};
10
11/// Arguments for the Slack Web API method [`admin.functions.list`](https://docs.slack.dev/reference/methods/admin.functions.list): Look up functions by a set of apps.
12///
13/// Send it with [`SlackClient::admin_functions_list`].
14#[doc(alias = "admin.functions.list")]
15#[derive(Debug, Clone, PartialEq, Serialize)]
16#[non_exhaustive]
17pub struct AdminFunctionsListRequest {
18    /// Comma-separated array of app IDs to get functions for; max 50.
19    pub app_ids: Vec<String>,
20    /// The team context to retrieve functions from.
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub team_id: Option<String>,
23    /// Whether to also include functions that are not yet distributed to any users in the function list. This is needed for admins that are approving an app request and will only work if the team owns the app.
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub include_non_distributed_functions: Option<bool>,
26    /// Set `cursor` to `next_cursor` returned by the previous call to list items in the next page.
27    #[serde(skip_serializing_if = "Option::is_none")]
28    pub cursor: Option<String>,
29    /// The number of results that will be returned by the API on each invocation. Must be between 1 and 1000, both inclusive.
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub limit: Option<i64>,
32}
33
34impl AdminFunctionsListRequest {
35    pub fn new(app_ids: Vec<String>) -> Self {
36        Self {
37            app_ids,
38            team_id: None,
39            include_non_distributed_functions: None,
40            cursor: None,
41            limit: None,
42        }
43    }
44
45    pub fn team_id(mut self, team_id: impl Into<String>) -> Self {
46        self.team_id = Some(team_id.into());
47        self
48    }
49
50    pub fn include_non_distributed_functions(
51        mut self,
52        include_non_distributed_functions: bool,
53    ) -> Self {
54        self.include_non_distributed_functions = Some(include_non_distributed_functions);
55        self
56    }
57
58    pub fn cursor(mut self, cursor: impl Into<String>) -> Self {
59        self.cursor = Some(cursor.into());
60        self
61    }
62
63    pub fn limit(mut self, limit: i64) -> Self {
64        self.limit = Some(limit);
65        self
66    }
67}
68
69impl SlackApiMethod for AdminFunctionsListRequest {
70    const METHOD: &'static str = "admin.functions.list";
71    type Response = AdminFunctionsListResponse;
72}
73
74impl CursorPaginated for AdminFunctionsListRequest {
75    fn set_cursor(&mut self, cursor: String) {
76        self.cursor = Some(cursor);
77    }
78}
79
80impl NextCursor for AdminFunctionsListResponse {
81    fn next_cursor(&self) -> Option<&str> {
82        self.response_metadata.as_ref()?.next_cursor.as_deref()
83    }
84}
85
86/// Successful response of the Slack Web API method [`admin.functions.list`](https://docs.slack.dev/reference/methods/admin.functions.list).
87#[doc(alias = "admin.functions.list")]
88#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
89pub struct AdminFunctionsListResponse {
90    #[serde(
91        default,
92        deserialize_with = "crate::de::vec",
93        skip_serializing_if = "Vec::is_empty"
94    )]
95    pub functions: Vec<AdminFunctionsListResponseFunctions>,
96    #[serde(
97        default,
98        deserialize_with = "crate::de::opt_object",
99        skip_serializing_if = "Option::is_none"
100    )]
101    pub response_metadata: Option<ResponseMetadata>,
102    #[serde(
103        default,
104        deserialize_with = "crate::de::opt_string",
105        skip_serializing_if = "Option::is_none"
106    )]
107    pub warning: Option<String>,
108}
109
110#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
111pub struct AdminFunctionsListResponseFunctions {
112    #[serde(
113        default,
114        deserialize_with = "crate::de::opt_string",
115        skip_serializing_if = "Option::is_none"
116    )]
117    pub id: Option<String>,
118    #[serde(
119        default,
120        deserialize_with = "crate::de::opt_string",
121        skip_serializing_if = "Option::is_none"
122    )]
123    pub callback_id: Option<String>,
124    #[serde(
125        default,
126        deserialize_with = "crate::de::opt_string",
127        skip_serializing_if = "Option::is_none"
128    )]
129    pub title: Option<String>,
130    #[serde(
131        default,
132        deserialize_with = "crate::de::opt_string",
133        skip_serializing_if = "Option::is_none"
134    )]
135    pub description: Option<String>,
136    #[serde(
137        default,
138        deserialize_with = "crate::de::opt_string",
139        skip_serializing_if = "Option::is_none"
140    )]
141    pub r#type: Option<String>,
142    #[serde(
143        default,
144        deserialize_with = "crate::de::vec",
145        skip_serializing_if = "Vec::is_empty"
146    )]
147    pub input_parameters: Vec<AdminFunctionsListResponseFunctionsInputParameters>,
148    #[serde(
149        default,
150        deserialize_with = "crate::de::vec",
151        skip_serializing_if = "Vec::is_empty"
152    )]
153    pub output_parameters: Vec<AdminFunctionsListResponseFunctionsOutputParameters>,
154    #[serde(
155        default,
156        deserialize_with = "crate::de::opt_string",
157        skip_serializing_if = "Option::is_none"
158    )]
159    pub app_id: Option<String>,
160    #[serde(
161        default,
162        deserialize_with = "crate::de::opt_i64",
163        skip_serializing_if = "Option::is_none"
164    )]
165    pub date_created: Option<i64>,
166    #[serde(
167        default,
168        deserialize_with = "crate::de::opt_i64",
169        skip_serializing_if = "Option::is_none"
170    )]
171    pub date_updated: Option<i64>,
172    #[serde(
173        default,
174        deserialize_with = "crate::de::opt_i64",
175        skip_serializing_if = "Option::is_none"
176    )]
177    pub date_deleted: Option<i64>,
178}
179
180#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
181pub struct AdminFunctionsListResponseFunctionsInputParameters {
182    #[serde(
183        default,
184        deserialize_with = "crate::de::opt_string",
185        skip_serializing_if = "Option::is_none"
186    )]
187    pub r#type: Option<String>,
188    #[serde(
189        default,
190        deserialize_with = "crate::de::opt_string",
191        skip_serializing_if = "Option::is_none"
192    )]
193    pub name: Option<String>,
194    #[serde(
195        default,
196        deserialize_with = "crate::de::opt_string",
197        skip_serializing_if = "Option::is_none"
198    )]
199    pub description: Option<String>,
200    #[serde(
201        default,
202        deserialize_with = "crate::de::opt_string",
203        skip_serializing_if = "Option::is_none"
204    )]
205    pub title: Option<String>,
206    #[serde(
207        default,
208        deserialize_with = "crate::de::opt_bool",
209        skip_serializing_if = "Option::is_none"
210    )]
211    pub is_required: Option<bool>,
212}
213
214#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
215pub struct AdminFunctionsListResponseFunctionsOutputParameters {
216    #[serde(
217        default,
218        deserialize_with = "crate::de::opt_string",
219        skip_serializing_if = "Option::is_none"
220    )]
221    pub r#type: Option<String>,
222    #[serde(
223        default,
224        deserialize_with = "crate::de::opt_string",
225        skip_serializing_if = "Option::is_none"
226    )]
227    pub name: Option<String>,
228    #[serde(
229        default,
230        deserialize_with = "crate::de::opt_string",
231        skip_serializing_if = "Option::is_none"
232    )]
233    pub description: Option<String>,
234    #[serde(
235        default,
236        deserialize_with = "crate::de::opt_string",
237        skip_serializing_if = "Option::is_none"
238    )]
239    pub title: Option<String>,
240    #[serde(
241        default,
242        deserialize_with = "crate::de::opt_bool",
243        skip_serializing_if = "Option::is_none"
244    )]
245    pub is_required: Option<bool>,
246}
247
248/// Arguments for the Slack Web API method [`admin.functions.permissions.lookup`](https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup): Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities.
249///
250/// Send it with [`SlackClient::admin_functions_permissions_lookup`].
251#[doc(alias = "admin.functions.permissions.lookup")]
252#[derive(Debug, Clone, PartialEq, Serialize)]
253#[non_exhaustive]
254pub struct AdminFunctionsPermissionsLookupRequest {
255    /// An array of function IDs to get permissions for
256    pub function_ids: Vec<String>,
257}
258
259impl AdminFunctionsPermissionsLookupRequest {
260    pub fn new(function_ids: Vec<String>) -> Self {
261        Self { function_ids }
262    }
263}
264
265impl SlackApiMethod for AdminFunctionsPermissionsLookupRequest {
266    const METHOD: &'static str = "admin.functions.permissions.lookup";
267    type Response = AdminFunctionsPermissionsLookupResponse;
268}
269
270/// Successful response of the Slack Web API method [`admin.functions.permissions.lookup`](https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup).
271#[doc(alias = "admin.functions.permissions.lookup")]
272#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
273pub struct AdminFunctionsPermissionsLookupResponse {
274    #[serde(
275        default,
276        deserialize_with = "crate::de::opt_object",
277        skip_serializing_if = "Option::is_none"
278    )]
279    pub errors: Option<serde_json::Map<String, serde_json::Value>>,
280    #[serde(
281        default,
282        deserialize_with = "crate::de::opt_object",
283        skip_serializing_if = "Option::is_none"
284    )]
285    pub response_metadata: Option<ResponseMetadata>,
286    #[serde(
287        default,
288        deserialize_with = "crate::de::opt_string",
289        skip_serializing_if = "Option::is_none"
290    )]
291    pub warning: Option<String>,
292}
293
294/// Arguments for the Slack Web API method [`admin.functions.permissions.set`](https://docs.slack.dev/reference/methods/admin.functions.permissions.set): Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities.
295///
296/// Send it with [`SlackClient::admin_functions_permissions_set`].
297#[doc(alias = "admin.functions.permissions.set")]
298#[derive(Debug, Clone, PartialEq, Serialize)]
299#[non_exhaustive]
300pub struct AdminFunctionsPermissionsSetRequest {
301    /// The function ID to set permissions for.
302    pub function_id: String,
303    /// The function visibility.
304    #[serde(skip_serializing_if = "Option::is_none")]
305    pub visibility: Option<String>,
306    /// List of user IDs to allow for `named_entities` visibility.
307    #[serde(
308        skip_serializing_if = "Option::is_none",
309        serialize_with = "crate::form::as_json"
310    )]
311    pub user_ids: Option<Vec<String>>,
312    /// Array of permissions for the function.
313    #[serde(
314        skip_serializing_if = "Option::is_none",
315        serialize_with = "crate::form::as_json"
316    )]
317    pub permissions: Option<Vec<serde_json::Value>>,
318}
319
320impl AdminFunctionsPermissionsSetRequest {
321    pub fn new(function_id: impl Into<String>) -> Self {
322        Self {
323            function_id: function_id.into(),
324            visibility: None,
325            user_ids: None,
326            permissions: None,
327        }
328    }
329
330    pub fn visibility(mut self, visibility: impl Into<String>) -> Self {
331        self.visibility = Some(visibility.into());
332        self
333    }
334
335    pub fn user_ids(mut self, user_ids: Vec<String>) -> Self {
336        self.user_ids = Some(user_ids);
337        self
338    }
339
340    pub fn permissions(mut self, permissions: Vec<serde_json::Value>) -> Self {
341        self.permissions = Some(permissions);
342        self
343    }
344}
345
346impl SlackApiMethod for AdminFunctionsPermissionsSetRequest {
347    const METHOD: &'static str = "admin.functions.permissions.set";
348    type Response = AdminFunctionsPermissionsSetResponse;
349}
350
351/// Successful response of the Slack Web API method [`admin.functions.permissions.set`](https://docs.slack.dev/reference/methods/admin.functions.permissions.set).
352#[doc(alias = "admin.functions.permissions.set")]
353#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
354pub struct AdminFunctionsPermissionsSetResponse {
355    /// Fields returned by Slack. This method has no documented response example.
356    #[serde(flatten)]
357    pub extra: serde_json::Map<String, serde_json::Value>,
358    #[serde(
359        default,
360        deserialize_with = "crate::de::opt_object",
361        skip_serializing_if = "Option::is_none"
362    )]
363    pub response_metadata: Option<ResponseMetadata>,
364    #[serde(
365        default,
366        deserialize_with = "crate::de::opt_string",
367        skip_serializing_if = "Option::is_none"
368    )]
369    pub warning: Option<String>,
370}
371
372impl SlackClient {
373    /// Calls the Slack Web API method [`admin.functions.list`](https://docs.slack.dev/reference/methods/admin.functions.list): Look up functions by a set of apps.
374    ///
375    /// Required scopes:
376    ///
377    /// - user token: `admin.workflows:read`
378    ///
379    /// Rate limit: Tier 2 (<https://docs.slack.dev/apis/web-api/rate-limits>).
380    ///
381    /// # Errors
382    ///
383    /// Returns [`SlackError::Api`] when Slack answers `"ok": false`; see [`SlackClient::call`] for the other cases.
384    #[doc(alias = "admin.functions.list")]
385    pub async fn admin_functions_list(
386        &self,
387        request: &AdminFunctionsListRequest,
388    ) -> Result<AdminFunctionsListResponse, SlackError> {
389        self.call(request).await
390    }
391
392    /// Calls the Slack Web API method [`admin.functions.permissions.lookup`](https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup): Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities.
393    ///
394    /// Required scopes:
395    ///
396    /// - user token: `admin.workflows:read`
397    ///
398    /// Rate limit: Tier 3 (<https://docs.slack.dev/apis/web-api/rate-limits>).
399    ///
400    /// # Errors
401    ///
402    /// Returns [`SlackError::Api`] when Slack answers `"ok": false`; see [`SlackClient::call`] for the other cases.
403    #[doc(alias = "admin.functions.permissions.lookup")]
404    pub async fn admin_functions_permissions_lookup(
405        &self,
406        request: &AdminFunctionsPermissionsLookupRequest,
407    ) -> Result<AdminFunctionsPermissionsLookupResponse, SlackError> {
408        self.call(request).await
409    }
410
411    /// Calls the Slack Web API method [`admin.functions.permissions.set`](https://docs.slack.dev/reference/methods/admin.functions.permissions.set): Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities.
412    ///
413    /// Required scopes:
414    ///
415    /// - user token: `admin.workflows:read`
416    ///
417    /// Rate limit: Tier 3 (<https://docs.slack.dev/apis/web-api/rate-limits>).
418    ///
419    /// # Errors
420    ///
421    /// Returns [`SlackError::Api`] when Slack answers `"ok": false`; see [`SlackClient::call`] for the other cases.
422    #[doc(alias = "admin.functions.permissions.set")]
423    pub async fn admin_functions_permissions_set(
424        &self,
425        request: &AdminFunctionsPermissionsSetRequest,
426    ) -> Result<AdminFunctionsPermissionsSetResponse, SlackError> {
427        self.call(request).await
428    }
429}