sfr_slack_api/api/
files_get_upload_url_external.rs

1//! The Slack API definition of `files.getUploadURLExternal`.
2//!
3//! <https://api.slack.com/methods/files.getUploadURLExternal>
4
5use sfr_types as st;
6
7pub use st::FilesGetUploadUrlExternalResponse;
8
9use crate::{Client, Request};
10use reqwest::multipart::Form;
11
12/// The request object for <https://api.slack.com/methods/files.getUploadURLExternal>.
13#[derive(Debug)]
14pub struct FilesGetUploadUrlExternal(st::FilesGetUploadUrlExternalRequest);
15
16/// The code indicating the request handled in this file.
17const API_CODE: &str = "files.getUploadURLExternal";
18
19impl FilesGetUploadUrlExternal {
20    /// Requests `files.getUploadURLExternal` to Slack.
21    async fn request_inner(
22        self,
23        client: &Client,
24    ) -> Result<FilesGetUploadUrlExternalResponse, st::Error> {
25        #[allow(clippy::missing_docs_in_private_items)] // https://github.com/rust-lang/rust-clippy/issues/13298
26        const URL: &str = "https://slack.com/api/files.getUploadURLExternal";
27
28        let form = self.form().await;
29        tracing::debug!("form = {form:?}");
30
31        let response = client
32            .client()
33            .post(URL)
34            .bearer_auth(client.token())
35            .multipart(form)
36            .send()
37            .await
38            .map_err(|e| st::Error::failed_to_request_by_http(API_CODE, e))?;
39        tracing::debug!("response = {response:?}");
40
41        let body: serde_json::Value = response
42            .json()
43            .await
44            .map_err(|e| st::Error::failed_to_read_json(API_CODE, e))?;
45        tracing::debug!("body = {body:?}");
46
47        body.try_into()
48    }
49
50    /// Creates [`Form`].
51    async fn form(self) -> Form {
52        let mut form = Form::new();
53
54        form = form.text("filename", self.0.filename);
55        form = form.text("length", self.0.length.to_string());
56
57        if let Some(alt_txt) = &self.0.alt_txt {
58            form = form.text("alt_txt", alt_txt.clone());
59        }
60
61        if let Some(snippet_type) = &self.0.snippet_type {
62            form = form.text("snippet_type", snippet_type.clone());
63        }
64
65        form
66    }
67}
68
69impl From<st::FilesGetUploadUrlExternalRequest> for FilesGetUploadUrlExternal {
70    fn from(inner: st::FilesGetUploadUrlExternalRequest) -> Self {
71        Self(inner)
72    }
73}
74
75impl Request for FilesGetUploadUrlExternal {
76    type Response = FilesGetUploadUrlExternalResponse;
77
78    async fn request(self, client: &Client) -> Result<Self::Response, st::Error> {
79        self.request_inner(client).await
80    }
81}