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 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 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 pub async fn files_delete(
27 &self,
28 value: &SlackApiFilesDeleteRequest,
29 ) -> SlackApiResponse<SlackApiFilesDeleteResponse> {
30 self.http_post("files.delete", value).await
31 }
32
33 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 pub async fn files_info(
44 &self,
45 value: &SlackApiFilesInfoRequest,
46 ) -> SlackApiResponse<SlackApiFilesInfoResponse> {
47 self.http_post("files.info", value).await
48 }
49 pub async fn files_list(
52 &self,
53 value: &SlackApiFilesListRequest,
54 ) -> SlackApiResponse<SlackApiFilesListResponse> {
55 self.http_post("files.list", value).await
56 }
57 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 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 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 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 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 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 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 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 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}