slack_web_api/api/
files.rs

1use mpart_async::client::MultipartRequest;
2use mpart_async::filestream::FileStream;
3use crate::{SlackApiResponse, SlackClient, SlackTypesFile};
4use serde_derive::{Deserialize, Serialize};
5
6
7impl SlackClient {
8    /// https://api.slack.com/methods/files.comments.delete
9    // Deletes an existing comment on a file.
10    pub async fn files_comments_delete(
11        &self,
12        value: &SlackApiFilesCommentsDeleteRequest,
13    ) -> SlackApiResponse<SlackApiFilesCommentsDeleteResponse> {
14        self.http_post("files.comments.delete", value).await
15    }
16    /// https://api.slack.com/methods/files.completeUploadExternal
17    // Finishes an upload started with files.getUploadURLExternal
18    pub async fn files_complete_upload_external(
19        &self,
20        value: &SlackApiFilesCompleteUploadExternalRequest,
21    ) -> SlackApiResponse<SlackApiFilesCompleteUploadExternalResponse> {
22        self.http_post("files.completeUploadExternal", value).await
23    }
24    /// https://api.slack.com/methods/files.delete
25    // Deletes a file.
26    pub async fn files_delete(
27        &self,
28        value: &SlackApiFilesDeleteRequest,
29    ) -> SlackApiResponse<SlackApiFilesDeleteResponse> {
30        self.http_post("files.delete", value).await
31    }
32
33    /// https://api.slack.com/methods/files.getUploadURLExternal
34    // Gets a URL for an edge external file upload
35    pub async fn files_get_upload_url_external(
36        &self,
37        value: &SlackApiFilesGetUploadUrlExternalRequest,
38    ) -> SlackApiResponse<SlackApiFilesGetUploadUrlExternalResponse> {
39        self.http_post("files.getUploadURLExternal", value).await
40    }
41    /// https://api.slack.com/methods/files.info
42    // Gets information about a file.
43    pub async fn files_info(
44        &self,
45        value: &SlackApiFilesInfoRequest,
46    ) -> SlackApiResponse<SlackApiFilesInfoResponse> {
47        self.http_post("files.info", value).await
48    }
49    /// https://api.slack.com/methods/files.list
50    // List for a team, in a channel, or from a user with applied filters.
51    pub async fn files_list(
52        &self,
53        value: &SlackApiFilesListRequest,
54    ) -> SlackApiResponse<SlackApiFilesListResponse> {
55        self.http_post("files.list", value).await
56    }
57    /// https://api.slack.com/methods/files.revokePublicURL
58    // Revokes public/external sharing access for a file
59    pub async fn files_revoke_public_url(
60        &self,
61        value: &SlackApiFilesRevokePublicUrlRequest,
62    ) -> SlackApiResponse<SlackApiFilesRevokePublicUrlResponse> {
63        self.http_post("files.revokePublicURL", value).await
64    }
65
66    /// https://api.slack.com/methods/files.sharedPublicURL
67    // Enables a file for public/external sharing.
68    pub async fn files_shared_public_url(
69        &self,
70        value: &SlackApiFilesSharePublicUrlRequest,
71    ) -> SlackApiResponse<SlackApiFilesSharePublicUrlResponse> {
72        self.http_post("files.sharedPublicURL", value).await
73    }
74
75    /// https://api.slack.com/methods/files.upload
76    // Uploads or creates a file.
77    /// https://api.slack.com/methods/chat.delete
78    pub async fn files_upload(
79        &self,
80        value: &SlackApiFilesUploadRequest,
81    ) -> SlackApiResponse<SlackApiFilesUploadResponse> {
82        self.http_post_data(
83            "files.upload",
84            value.clone().to_multipart(),
85        )
86            .await
87    }
88    /// https://api.slack.com/methods/files.remote.add
89    // Adds a file from a remote service
90    pub async fn files_remote_add(
91        &self,
92        value: &SlackApiFilesRemoteAddRequest,
93    ) -> SlackApiResponse<SlackApiFilesRemoteAddResponse> {
94        self.http_post("files.remote.add", value).await
95    }
96
97    /// https://api.slack.com/methods/files.remote.info
98    // Retrieve information about a remote file added to Slack
99    pub async fn files_remote_info(
100        &self,
101        value: &SlackApiFilesRemoteInfoRequest,
102    ) -> SlackApiResponse<SlackApiFilesRemoteInfoResponse> {
103        self.http_post("files.remote.info", value).await
104    }
105
106    /// https://api.slack.com/methods/files.remote.list
107    // Retrieve information about a remote file added to Slack
108    pub async fn files_remote_list(
109        &self,
110        value: &SlackApiFilesRemoteListRequest,
111    ) -> SlackApiResponse<SlackApiFilesRemoteListResponse> {
112        self.http_post("files.remote.list", value).await
113    }
114
115    /// https://api.slack.com/methods/files.remote.remove
116    // Remove a remote file.
117    pub async fn files_remote_remove(
118        &self,
119        value: &SlackApiFilesRemoteRemoveRequest,
120    ) -> SlackApiResponse<SlackApiFilesRemoteRemoveResponse> {
121        self.http_post("files.remote.remove", value).await
122    }
123
124    /// https://api.slack.com/methods/files.remote.share
125    // Share a remote file into a channel.
126    pub async fn files_remote_share(
127        &self,
128        value: &SlackApiFilesRemoteShareRequest,
129    ) -> SlackApiResponse<SlackApiFilesRemoteShareResponse> {
130        self.http_post("files.remote.share", value).await
131    }
132    /// https://api.slack.com/methods/files.remote.update
133    // Updates an existing remote file.
134    pub async fn files_remote_update(
135        &self,
136        value: &SlackApiFilesRemoteUpdateRequest,
137    ) -> SlackApiResponse<SlackApiFilesRemoteUpdateResponse> {
138        self.http_post("files.remote.update", value).await
139    }
140}
141
142#[derive(Debug, Default,Clone, Deserialize, Serialize)]
143pub struct SlackApiFilesCommentsDeleteRequest {
144    pub channel: String,
145    pub file: String,
146    pub id: String,
147}
148
149#[derive(Debug, Default,Clone, Deserialize, Serialize)]
150pub struct SlackApiFilesCommentsDeleteResponse {
151    pub ok: bool,
152}
153
154#[derive(Debug, Default,Clone, Deserialize, Serialize)]
155pub struct SlackApiFilesCompleteUploadExternalRequest {
156    pub files: Vec<SlackApiFilesCompleteUploadExternalRequestFile>,
157    #[serde(skip_serializing_if = "Option::is_none")]
158    pub channel_id: Option<String>,
159    #[serde(skip_serializing_if = "Option::is_none")]
160    pub initial_comment: Option<String>,
161    #[serde(skip_serializing_if = "Option::is_none")]
162    pub thread_ts: Option<String>,
163}
164
165#[derive(Debug, Default,Clone, Deserialize, Serialize)]
166pub struct SlackApiFilesCompleteUploadExternalRequestFile {
167    id: String,
168    #[serde(skip_serializing_if = "Option::is_none")]
169    title: Option<String>,
170}
171
172#[derive(Debug, Default,Clone, Deserialize, Serialize)]
173pub struct SlackApiFilesCompleteUploadExternalResponse {
174    pub ok: bool,
175    pub files: Vec<SlackApiFilesCompleteUploadExternalRequestFile>,
176}
177
178#[derive(Debug, Default,Clone, Deserialize, Serialize)]
179pub struct SlackApiFilesDeleteRequest {
180    pub file: String,
181}
182
183#[derive(Debug, Default,Clone, Deserialize, Serialize)]
184pub struct SlackApiFilesDeleteResponse {
185    pub ok: bool,
186}
187
188#[derive(Debug, Default,Clone, Deserialize, Serialize)]
189pub struct SlackApiFilesGetUploadUrlExternalRequest {
190    pub filename: String,
191    pub length: u32,
192    #[serde(skip_serializing_if = "Option::is_none")]
193    pub alt_txt: Option<String>,
194    #[serde(skip_serializing_if = "Option::is_none")]
195    pub snippet_type: Option<String>,
196}
197
198#[derive(Debug, Default,Clone, Deserialize, Serialize)]
199pub struct SlackApiFilesGetUploadUrlExternalResponse {
200    pub ok: bool,
201    pub upload_url: String,
202    pub file_id: String,
203}
204
205#[derive(Debug, Default,Clone, Deserialize, Serialize)]
206pub struct SlackApiFilesInfoRequest {
207    pub file: String,
208    #[serde(skip_serializing_if = "Option::is_none")]
209    pub count: Option<u32>,
210    #[serde(skip_serializing_if = "Option::is_none")]
211    pub cursor: Option<String>,
212    #[serde(skip_serializing_if = "Option::is_none")]
213    pub limit: Option<u32>,
214    #[serde(skip_serializing_if = "Option::is_none")]
215    pub page: Option<u32>,
216}
217
218#[derive(Debug, Default,Clone, Deserialize, Serialize)]
219pub struct SlackApiFilesInfoResponse {
220    pub ok: bool,
221    pub upload_url: String,
222    pub file_id: String,
223}
224
225#[derive(Debug, Default,Clone, Deserialize, Serialize)]
226pub struct SlackApiFilesListRequest {
227    pub channel: String,
228    #[serde(skip_serializing_if = "Option::is_none")]
229    pub count: Option<u32>,
230    #[serde(skip_serializing_if = "Option::is_none")]
231    pub page: Option<u32>,
232    #[serde(skip_serializing_if = "Option::is_none")]
233    pub show_files_hidden_by_limit: Option<bool>,
234    #[serde(skip_serializing_if = "Option::is_none")]
235    pub team_id: Option<String>,
236    #[serde(skip_serializing_if = "Option::is_none")]
237    pub ts_from: Option<String>,
238    #[serde(skip_serializing_if = "Option::is_none")]
239    pub ts_to: Option<String>,
240    #[serde(skip_serializing_if = "Option::is_none")]
241    pub types: Option<String>,
242    #[serde(skip_serializing_if = "Option::is_none")]
243    pub user: Option<String>,
244}
245
246#[derive(Debug, Default,Clone, Deserialize, Serialize)]
247pub struct SlackApiFilesListResponse {
248    pub ok: bool,
249    pub upload_url: String,
250    pub files: Vec<SlackTypesFile>,
251    pub paging: SlackTypesFile,
252}
253
254#[derive(Debug, Default,Clone, Deserialize, Serialize)]
255pub struct SlackTypesPaging {
256    pub count: u32,
257    pub total: u32,
258    pub page: u32,
259    pub pages: u32,
260}
261
262#[derive(Debug, Default,Clone, Deserialize, Serialize)]
263pub struct SlackApiFilesRevokePublicUrlRequest {
264    pub channel: String,
265    pub file: String,
266}
267
268#[derive(Debug, Default,Clone, Deserialize, Serialize)]
269pub struct SlackApiFilesRevokePublicUrlResponse {
270    pub ok: bool,
271}
272
273#[derive(Debug, Default,Clone, Deserialize, Serialize)]
274pub struct SlackApiFilesSharePublicUrlRequest {
275    pub channel: String,
276    pub file: String,
277}
278
279#[derive(Debug, Default,Clone, Deserialize, Serialize)]
280pub struct SlackApiFilesSharePublicUrlResponse {
281    pub ok: bool,
282    pub file: SlackTypesFile,
283}
284
285#[derive(Debug, Default,Clone, Deserialize, Serialize)]
286pub struct SlackApiFilesUploadRequest {
287    pub channels: Option<String>,
288    pub content: Option<String>,
289    pub file: Option<String>,
290    pub filename: Option<String>,
291    pub filetype: Option<String>,
292    pub initial_comment: Option<String>,
293    pub thread_ts: Option<String>,
294    pub title: Option<String>,
295}
296
297impl SlackApiFilesUploadRequest {
298    fn to_multipart(&self) -> MultipartRequest<FileStream> {
299        let mut multipart = MultipartRequest::default();
300        let value = self.clone();
301        if value.channels.is_some() {
302            multipart.add_field("channels", value.channels.unwrap_or_default().as_str());
303        }
304        if value.content.is_some() {
305            multipart.add_field("content", value.content.unwrap_or_default().as_str());
306        }
307        if value.file.is_some() {
308            multipart.add_file("file", value.file.unwrap_or_default());
309        }
310        if value.filename.is_some() {
311            multipart.add_field("filename", value.filename.unwrap_or_default().as_str());
312        }
313        if value.filetype.is_some() {
314            multipart.add_field("filetype", value.filetype.unwrap_or_default().as_str());
315        }
316        if value.initial_comment.is_some() {
317            multipart.add_field("initial_comment", value.initial_comment.unwrap_or_default().as_str());
318        }
319        if value.thread_ts.is_some() {
320            multipart.add_field("thread_ts", value.thread_ts.unwrap_or_default().as_str());
321        }
322        if value.title.is_some() {
323            multipart.add_field("title", value.title.unwrap_or_default().as_str());
324        }
325        multipart
326    }
327}
328
329#[derive(Debug, Default,Clone, Deserialize, Serialize)]
330pub struct SlackApiFilesUploadResponse {
331    pub ok: bool,
332    pub file: SlackTypesFile,
333}
334
335#[derive(Debug, Default,Clone, Deserialize, Serialize)]
336pub struct SlackApiFilesRemoteAddRequest {
337    pub external_id: Option<String>,
338    pub external_url: Option<String>,
339    pub title: Option<String>,
340    pub filetype: Option<String>,
341    pub indexable_file_contents: Option<String>,
342    pub preview_image: Option<String>,
343}
344
345#[derive(Debug, Default,Clone, Deserialize, Serialize)]
346pub struct SlackApiFilesRemoteAddResponse {
347    pub ok: bool,
348    pub file: SlackTypesFile,
349}
350
351#[derive(Debug, Default,Clone, Deserialize, Serialize)]
352pub struct SlackApiFilesRemoteInfoRequest {
353    pub external_id: Option<String>,
354    pub file: Option<String>,
355}
356
357#[derive(Debug, Default,Clone, Deserialize, Serialize)]
358pub struct SlackApiFilesRemoteInfoResponse {
359    pub ok: bool,
360}
361
362#[derive(Debug, Default,Clone, Deserialize, Serialize)]
363pub struct SlackApiFilesRemoteListRequest {
364    pub channel: Option<String>,
365    pub cursor: Option<String>,
366    pub limit: Option<u32>,
367    pub ts_from: Option<String>,
368    pub ts_to: Option<String>,
369}
370
371#[derive(Debug, Default,Clone, Deserialize, Serialize)]
372pub struct SlackApiFilesRemoteListResponse {
373    pub ok: bool,
374}
375
376#[derive(Debug, Default,Clone, Deserialize, Serialize)]
377pub struct SlackApiFilesRemoteRemoveRequest {
378    pub external_id: Option<String>,
379    pub file: Option<String>,
380}
381
382#[derive(Debug, Default,Clone, Deserialize, Serialize)]
383pub struct SlackApiFilesRemoteRemoveResponse {
384    pub ok: bool,
385}
386
387#[derive(Debug, Default,Clone, Deserialize, Serialize)]
388pub struct SlackApiFilesRemoteShareRequest {
389    pub channels: Option<String>,
390    pub external_id: Option<String>,
391    pub file: Option<String>,
392}
393
394#[derive(Debug, Default,Clone, Deserialize, Serialize)]
395pub struct SlackApiFilesRemoteShareResponse {
396    pub ok: bool,
397}
398
399#[derive(Debug, Default,Clone, Deserialize, Serialize)]
400pub struct SlackApiFilesRemoteUpdateRequest {
401    pub external_id: Option<String>,
402    pub external_url: Option<String>,
403    pub file: Option<String>,
404    pub filetype: Option<String>,
405    pub indexable_file_contents: Option<String>,
406    pub preview_image: Option<String>,
407    pub title: Option<String>,
408}
409
410#[derive(Debug, Default,Clone, Deserialize, Serialize)]
411pub struct SlackApiFilesRemoteUpdateResponse {
412    pub ok: bool,
413}