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 = "canvases.access.delete")]
15#[derive(Debug, Clone, PartialEq, Serialize)]
16#[non_exhaustive]
17pub struct CanvasesAccessDeleteRequest {
18 pub canvas_id: String,
20 #[serde(
22 skip_serializing_if = "Option::is_none",
23 serialize_with = "crate::form::as_json"
24 )]
25 pub channel_ids: Option<Vec<String>>,
26 #[serde(
28 skip_serializing_if = "Option::is_none",
29 serialize_with = "crate::form::as_json"
30 )]
31 pub user_ids: Option<Vec<String>>,
32}
33
34impl CanvasesAccessDeleteRequest {
35 pub fn new(canvas_id: impl Into<String>) -> Self {
36 Self {
37 canvas_id: canvas_id.into(),
38 channel_ids: None,
39 user_ids: None,
40 }
41 }
42
43 pub fn channel_ids(mut self, channel_ids: Vec<String>) -> Self {
44 self.channel_ids = Some(channel_ids);
45 self
46 }
47
48 pub fn user_ids(mut self, user_ids: Vec<String>) -> Self {
49 self.user_ids = Some(user_ids);
50 self
51 }
52}
53
54impl SlackApiMethod for CanvasesAccessDeleteRequest {
55 const METHOD: &'static str = "canvases.access.delete";
56 type Response = CanvasesAccessDeleteResponse;
57}
58
59#[doc(alias = "canvases.access.delete")]
61#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
62pub struct CanvasesAccessDeleteResponse {
63 #[serde(flatten)]
65 pub extra: serde_json::Map<String, serde_json::Value>,
66 #[serde(
67 default,
68 deserialize_with = "crate::de::opt_object",
69 skip_serializing_if = "Option::is_none"
70 )]
71 pub response_metadata: Option<ResponseMetadata>,
72 #[serde(
73 default,
74 deserialize_with = "crate::de::opt_string",
75 skip_serializing_if = "Option::is_none"
76 )]
77 pub warning: Option<String>,
78}
79
80#[doc(alias = "canvases.access.set")]
84#[derive(Debug, Clone, PartialEq, Serialize)]
85#[non_exhaustive]
86pub struct CanvasesAccessSetRequest {
87 pub canvas_id: String,
89 pub access_level: String,
91 #[serde(
93 skip_serializing_if = "Option::is_none",
94 serialize_with = "crate::form::as_json"
95 )]
96 pub channel_ids: Option<Vec<String>>,
97 #[serde(
99 skip_serializing_if = "Option::is_none",
100 serialize_with = "crate::form::as_json"
101 )]
102 pub user_ids: Option<Vec<String>>,
103}
104
105impl CanvasesAccessSetRequest {
106 pub fn new(canvas_id: impl Into<String>, access_level: impl Into<String>) -> Self {
107 Self {
108 canvas_id: canvas_id.into(),
109 access_level: access_level.into(),
110 channel_ids: None,
111 user_ids: None,
112 }
113 }
114
115 pub fn channel_ids(mut self, channel_ids: Vec<String>) -> Self {
116 self.channel_ids = Some(channel_ids);
117 self
118 }
119
120 pub fn user_ids(mut self, user_ids: Vec<String>) -> Self {
121 self.user_ids = Some(user_ids);
122 self
123 }
124}
125
126impl SlackApiMethod for CanvasesAccessSetRequest {
127 const METHOD: &'static str = "canvases.access.set";
128 type Response = CanvasesAccessSetResponse;
129}
130
131#[doc(alias = "canvases.access.set")]
133#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
134pub struct CanvasesAccessSetResponse {
135 #[serde(flatten)]
137 pub extra: serde_json::Map<String, serde_json::Value>,
138 #[serde(
139 default,
140 deserialize_with = "crate::de::opt_object",
141 skip_serializing_if = "Option::is_none"
142 )]
143 pub response_metadata: Option<ResponseMetadata>,
144 #[serde(
145 default,
146 deserialize_with = "crate::de::opt_string",
147 skip_serializing_if = "Option::is_none"
148 )]
149 pub warning: Option<String>,
150}
151
152#[doc(alias = "canvases.create")]
156#[derive(Debug, Clone, PartialEq, Serialize, Default)]
157#[non_exhaustive]
158pub struct CanvasesCreateRequest {
159 #[serde(skip_serializing_if = "Option::is_none")]
161 pub title: Option<String>,
162 #[serde(skip_serializing_if = "Option::is_none")]
164 pub document_content: Option<String>,
165 #[serde(skip_serializing_if = "Option::is_none")]
167 pub channel_id: Option<String>,
168}
169
170impl CanvasesCreateRequest {
171 pub fn new() -> Self {
172 Self {
173 title: None,
174 document_content: None,
175 channel_id: None,
176 }
177 }
178
179 pub fn title(mut self, title: impl Into<String>) -> Self {
180 self.title = Some(title.into());
181 self
182 }
183
184 pub fn document_content(mut self, document_content: impl Into<String>) -> Self {
185 self.document_content = Some(document_content.into());
186 self
187 }
188
189 pub fn channel_id(mut self, channel_id: impl Into<String>) -> Self {
190 self.channel_id = Some(channel_id.into());
191 self
192 }
193}
194
195impl SlackApiMethod for CanvasesCreateRequest {
196 const METHOD: &'static str = "canvases.create";
197 type Response = CanvasesCreateResponse;
198}
199
200#[doc(alias = "canvases.create")]
202#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
203pub struct CanvasesCreateResponse {
204 #[serde(
205 default,
206 deserialize_with = "crate::de::opt_string",
207 skip_serializing_if = "Option::is_none"
208 )]
209 pub canvas_id: Option<String>,
210 #[serde(
211 default,
212 deserialize_with = "crate::de::opt_object",
213 skip_serializing_if = "Option::is_none"
214 )]
215 pub response_metadata: Option<ResponseMetadata>,
216 #[serde(
217 default,
218 deserialize_with = "crate::de::opt_string",
219 skip_serializing_if = "Option::is_none"
220 )]
221 pub warning: Option<String>,
222}
223
224#[doc(alias = "canvases.delete")]
228#[derive(Debug, Clone, PartialEq, Serialize)]
229#[non_exhaustive]
230pub struct CanvasesDeleteRequest {
231 pub canvas_id: String,
233}
234
235impl CanvasesDeleteRequest {
236 pub fn new(canvas_id: impl Into<String>) -> Self {
237 Self {
238 canvas_id: canvas_id.into(),
239 }
240 }
241}
242
243impl SlackApiMethod for CanvasesDeleteRequest {
244 const METHOD: &'static str = "canvases.delete";
245 type Response = CanvasesDeleteResponse;
246}
247
248#[doc(alias = "canvases.delete")]
250#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
251pub struct CanvasesDeleteResponse {
252 #[serde(flatten)]
254 pub extra: serde_json::Map<String, serde_json::Value>,
255 #[serde(
256 default,
257 deserialize_with = "crate::de::opt_object",
258 skip_serializing_if = "Option::is_none"
259 )]
260 pub response_metadata: Option<ResponseMetadata>,
261 #[serde(
262 default,
263 deserialize_with = "crate::de::opt_string",
264 skip_serializing_if = "Option::is_none"
265 )]
266 pub warning: Option<String>,
267}
268
269#[doc(alias = "canvases.edit")]
273#[derive(Debug, Clone, PartialEq, Serialize)]
274#[non_exhaustive]
275pub struct CanvasesEditRequest {
276 pub canvas_id: String,
278 #[serde(serialize_with = "crate::form::as_json")]
280 pub changes: Vec<serde_json::Value>,
281}
282
283impl CanvasesEditRequest {
284 pub fn new(canvas_id: impl Into<String>, changes: Vec<serde_json::Value>) -> Self {
285 Self {
286 canvas_id: canvas_id.into(),
287 changes,
288 }
289 }
290}
291
292impl SlackApiMethod for CanvasesEditRequest {
293 const METHOD: &'static str = "canvases.edit";
294 type Response = CanvasesEditResponse;
295}
296
297#[doc(alias = "canvases.edit")]
299#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
300pub struct CanvasesEditResponse {
301 #[serde(flatten)]
303 pub extra: serde_json::Map<String, serde_json::Value>,
304 #[serde(
305 default,
306 deserialize_with = "crate::de::opt_object",
307 skip_serializing_if = "Option::is_none"
308 )]
309 pub response_metadata: Option<ResponseMetadata>,
310 #[serde(
311 default,
312 deserialize_with = "crate::de::opt_string",
313 skip_serializing_if = "Option::is_none"
314 )]
315 pub warning: Option<String>,
316}
317
318#[doc(alias = "canvases.getContent")]
322#[derive(Debug, Clone, PartialEq, Serialize)]
323#[non_exhaustive]
324pub struct CanvasesGetContentRequest {
325 pub canvas_id: String,
327 #[serde(skip_serializing_if = "Option::is_none")]
329 pub content_type: Option<String>,
330}
331
332impl CanvasesGetContentRequest {
333 pub fn new(canvas_id: impl Into<String>) -> Self {
334 Self {
335 canvas_id: canvas_id.into(),
336 content_type: None,
337 }
338 }
339
340 pub fn content_type(mut self, content_type: impl Into<String>) -> Self {
341 self.content_type = Some(content_type.into());
342 self
343 }
344}
345
346impl SlackApiMethod for CanvasesGetContentRequest {
347 const METHOD: &'static str = "canvases.getContent";
348 type Response = CanvasesGetContentResponse;
349}
350
351#[doc(alias = "canvases.getContent")]
353#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
354pub struct CanvasesGetContentResponse {
355 #[serde(
356 default,
357 deserialize_with = "crate::de::opt_string",
358 skip_serializing_if = "Option::is_none"
359 )]
360 pub content: Option<String>,
361 #[serde(
362 default,
363 deserialize_with = "crate::de::opt_object",
364 skip_serializing_if = "Option::is_none"
365 )]
366 pub response_metadata: Option<ResponseMetadata>,
367 #[serde(
368 default,
369 deserialize_with = "crate::de::opt_string",
370 skip_serializing_if = "Option::is_none"
371 )]
372 pub warning: Option<String>,
373}
374
375#[doc(alias = "canvases.sections.lookup")]
379#[derive(Debug, Clone, PartialEq, Serialize)]
380#[non_exhaustive]
381pub struct CanvasesSectionsLookupRequest {
382 pub canvas_id: String,
384 pub criteria: String,
386}
387
388impl CanvasesSectionsLookupRequest {
389 pub fn new(canvas_id: impl Into<String>, criteria: impl Into<String>) -> Self {
390 Self {
391 canvas_id: canvas_id.into(),
392 criteria: criteria.into(),
393 }
394 }
395}
396
397impl SlackApiMethod for CanvasesSectionsLookupRequest {
398 const METHOD: &'static str = "canvases.sections.lookup";
399 type Response = CanvasesSectionsLookupResponse;
400}
401
402#[doc(alias = "canvases.sections.lookup")]
404#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
405pub struct CanvasesSectionsLookupResponse {
406 #[serde(
407 default,
408 deserialize_with = "crate::de::vec",
409 skip_serializing_if = "Vec::is_empty"
410 )]
411 pub sections: Vec<CanvasesSectionsLookupResponseSections>,
412 #[serde(
413 default,
414 deserialize_with = "crate::de::opt_object",
415 skip_serializing_if = "Option::is_none"
416 )]
417 pub response_metadata: Option<ResponseMetadata>,
418 #[serde(
419 default,
420 deserialize_with = "crate::de::opt_string",
421 skip_serializing_if = "Option::is_none"
422 )]
423 pub warning: Option<String>,
424}
425
426#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
427pub struct CanvasesSectionsLookupResponseSections {
428 #[serde(
429 default,
430 deserialize_with = "crate::de::opt_string",
431 skip_serializing_if = "Option::is_none"
432 )]
433 pub id: Option<String>,
434}
435
436impl SlackClient {
437 #[doc(alias = "canvases.access.delete")]
450 pub async fn canvases_access_delete(
451 &self,
452 request: &CanvasesAccessDeleteRequest,
453 ) -> Result<CanvasesAccessDeleteResponse, SlackError> {
454 self.call(request).await
455 }
456
457 #[doc(alias = "canvases.access.set")]
470 pub async fn canvases_access_set(
471 &self,
472 request: &CanvasesAccessSetRequest,
473 ) -> Result<CanvasesAccessSetResponse, SlackError> {
474 self.call(request).await
475 }
476
477 #[doc(alias = "canvases.create")]
490 pub async fn canvases_create(
491 &self,
492 request: &CanvasesCreateRequest,
493 ) -> Result<CanvasesCreateResponse, SlackError> {
494 self.call(request).await
495 }
496
497 #[doc(alias = "canvases.delete")]
510 pub async fn canvases_delete(
511 &self,
512 request: &CanvasesDeleteRequest,
513 ) -> Result<CanvasesDeleteResponse, SlackError> {
514 self.call(request).await
515 }
516
517 #[doc(alias = "canvases.edit")]
530 pub async fn canvases_edit(
531 &self,
532 request: &CanvasesEditRequest,
533 ) -> Result<CanvasesEditResponse, SlackError> {
534 self.call(request).await
535 }
536
537 #[doc(alias = "canvases.getContent")]
550 pub async fn canvases_get_content(
551 &self,
552 request: &CanvasesGetContentRequest,
553 ) -> Result<CanvasesGetContentResponse, SlackError> {
554 self.call(request).await
555 }
556
557 #[doc(alias = "canvases.sections.lookup")]
570 pub async fn canvases_sections_lookup(
571 &self,
572 request: &CanvasesSectionsLookupRequest,
573 ) -> Result<CanvasesSectionsLookupResponse, SlackError> {
574 self.call(request).await
575 }
576}