1#![allow(unused_imports)]
4
5use crate::objects::*;
6use crate::{
7 CursorPaginated, NextCursor, ResponseMetadata, SlackApiMethod, SlackClient, SlackError,
8};
9use serde::{Deserialize, Serialize};
10
11#[doc(alias = "admin.functions.list")]
15#[derive(Debug, Clone, PartialEq, Serialize)]
16#[non_exhaustive]
17pub struct AdminFunctionsListRequest {
18 pub app_ids: Vec<String>,
20 #[serde(skip_serializing_if = "Option::is_none")]
22 pub team_id: Option<String>,
23 #[serde(skip_serializing_if = "Option::is_none")]
25 pub include_non_distributed_functions: Option<bool>,
26 #[serde(skip_serializing_if = "Option::is_none")]
28 pub cursor: Option<String>,
29 #[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#[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#[doc(alias = "admin.functions.permissions.lookup")]
252#[derive(Debug, Clone, PartialEq, Serialize)]
253#[non_exhaustive]
254pub struct AdminFunctionsPermissionsLookupRequest {
255 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#[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#[doc(alias = "admin.functions.permissions.set")]
298#[derive(Debug, Clone, PartialEq, Serialize)]
299#[non_exhaustive]
300pub struct AdminFunctionsPermissionsSetRequest {
301 pub function_id: String,
303 #[serde(skip_serializing_if = "Option::is_none")]
305 pub visibility: Option<String>,
306 #[serde(
308 skip_serializing_if = "Option::is_none",
309 serialize_with = "crate::form::as_json"
310 )]
311 pub user_ids: Option<Vec<String>>,
312 #[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#[doc(alias = "admin.functions.permissions.set")]
353#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
354pub struct AdminFunctionsPermissionsSetResponse {
355 #[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 #[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 #[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 #[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}