Skip to main content

line_bot_sdk_messaging_api/apis/
messaging_api_blob_api.rs

1/*
2 * LINE Messaging API
3 *
4 * This document describes LINE Messaging API.
5 *
6 * The version of the OpenAPI document: 0.0.1
7 *
8 * Generated by: https://openapi-generator.tech
9 */
10
11use super::{configuration, ContentType, Error};
12use crate::{apis::ResponseContent, models};
13use reqwest;
14use serde::{de::Error as _, Deserialize, Serialize};
15use tokio::fs::File as TokioFile;
16use tokio_util::codec::{BytesCodec, FramedRead};
17
18/// struct for typed errors of method [`get_message_content`]
19#[derive(Debug, Clone, Serialize, Deserialize)]
20#[serde(untagged)]
21pub enum GetMessageContentError {
22    UnknownValue(serde_json::Value),
23}
24
25/// struct for typed errors of method [`get_message_content_preview`]
26#[derive(Debug, Clone, Serialize, Deserialize)]
27#[serde(untagged)]
28pub enum GetMessageContentPreviewError {
29    UnknownValue(serde_json::Value),
30}
31
32/// struct for typed errors of method [`get_message_content_transcoding_by_message_id`]
33#[derive(Debug, Clone, Serialize, Deserialize)]
34#[serde(untagged)]
35pub enum GetMessageContentTranscodingByMessageIdError {
36    UnknownValue(serde_json::Value),
37}
38
39/// struct for typed errors of method [`get_rich_menu_image`]
40#[derive(Debug, Clone, Serialize, Deserialize)]
41#[serde(untagged)]
42pub enum GetRichMenuImageError {
43    UnknownValue(serde_json::Value),
44}
45
46/// struct for typed errors of method [`set_rich_menu_image`]
47#[derive(Debug, Clone, Serialize, Deserialize)]
48#[serde(untagged)]
49pub enum SetRichMenuImageError {
50    UnknownValue(serde_json::Value),
51}
52
53/// Download image, video, and audio data sent from users.
54pub async fn get_message_content(
55    configuration: &configuration::Configuration,
56    message_id: &str,
57) -> Result<reqwest::Response, Error<GetMessageContentError>> {
58    // add a prefix to parameters to efficiently prevent name collisions
59    let p_path_message_id = message_id;
60
61    let uri_str = format!(
62        "{}/v2/bot/message/{messageId}/content",
63        configuration.base_path,
64        messageId = crate::apis::urlencode(p_path_message_id)
65    );
66    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
67
68    if let Some(ref user_agent) = configuration.user_agent {
69        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
70    }
71    if let Some(ref token) = configuration.bearer_access_token {
72        req_builder = req_builder.bearer_auth(token.to_owned());
73    };
74
75    let req = req_builder.build()?;
76    let resp = configuration.client.execute(req).await?;
77
78    let status = resp.status();
79
80    if !status.is_client_error() && !status.is_server_error() {
81        Ok(resp)
82    } else {
83        let content = resp.text().await?;
84        let entity: Option<GetMessageContentError> = serde_json::from_str(&content).ok();
85        Err(Error::ResponseError(ResponseContent {
86            status,
87            content,
88            entity,
89        }))
90    }
91}
92
93/// Get a preview image of the image or video
94pub async fn get_message_content_preview(
95    configuration: &configuration::Configuration,
96    message_id: &str,
97) -> Result<reqwest::Response, Error<GetMessageContentPreviewError>> {
98    // add a prefix to parameters to efficiently prevent name collisions
99    let p_path_message_id = message_id;
100
101    let uri_str = format!(
102        "{}/v2/bot/message/{messageId}/content/preview",
103        configuration.base_path,
104        messageId = crate::apis::urlencode(p_path_message_id)
105    );
106    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
107
108    if let Some(ref user_agent) = configuration.user_agent {
109        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
110    }
111    if let Some(ref token) = configuration.bearer_access_token {
112        req_builder = req_builder.bearer_auth(token.to_owned());
113    };
114
115    let req = req_builder.build()?;
116    let resp = configuration.client.execute(req).await?;
117
118    let status = resp.status();
119
120    if !status.is_client_error() && !status.is_server_error() {
121        Ok(resp)
122    } else {
123        let content = resp.text().await?;
124        let entity: Option<GetMessageContentPreviewError> = serde_json::from_str(&content).ok();
125        Err(Error::ResponseError(ResponseContent {
126            status,
127            content,
128            entity,
129        }))
130    }
131}
132
133/// Verify the preparation status of a video or audio for getting
134pub async fn get_message_content_transcoding_by_message_id(
135    configuration: &configuration::Configuration,
136    message_id: &str,
137) -> Result<
138    models::GetMessageContentTranscodingResponse,
139    Error<GetMessageContentTranscodingByMessageIdError>,
140> {
141    // add a prefix to parameters to efficiently prevent name collisions
142    let p_path_message_id = message_id;
143
144    let uri_str = format!(
145        "{}/v2/bot/message/{messageId}/content/transcoding",
146        configuration.base_path,
147        messageId = crate::apis::urlencode(p_path_message_id)
148    );
149    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
150
151    if let Some(ref user_agent) = configuration.user_agent {
152        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
153    }
154    if let Some(ref token) = configuration.bearer_access_token {
155        req_builder = req_builder.bearer_auth(token.to_owned());
156    };
157
158    let req = req_builder.build()?;
159    let resp = configuration.client.execute(req).await?;
160
161    let status = resp.status();
162    let content_type = resp
163        .headers()
164        .get("content-type")
165        .and_then(|v| v.to_str().ok())
166        .unwrap_or("application/octet-stream");
167    let content_type = super::ContentType::from(content_type);
168
169    if !status.is_client_error() && !status.is_server_error() {
170        let content = resp.text().await?;
171        match content_type {
172            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
173            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::GetMessageContentTranscodingResponse`"))),
174            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::GetMessageContentTranscodingResponse`")))),
175        }
176    } else {
177        let content = resp.text().await?;
178        let entity: Option<GetMessageContentTranscodingByMessageIdError> =
179            serde_json::from_str(&content).ok();
180        Err(Error::ResponseError(ResponseContent {
181            status,
182            content,
183            entity,
184        }))
185    }
186}
187
188/// Download rich menu image.
189pub async fn get_rich_menu_image(
190    configuration: &configuration::Configuration,
191    rich_menu_id: &str,
192) -> Result<reqwest::Response, Error<GetRichMenuImageError>> {
193    // add a prefix to parameters to efficiently prevent name collisions
194    let p_path_rich_menu_id = rich_menu_id;
195
196    let uri_str = format!(
197        "{}/v2/bot/richmenu/{richMenuId}/content",
198        configuration.base_path,
199        richMenuId = crate::apis::urlencode(p_path_rich_menu_id)
200    );
201    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
202
203    if let Some(ref user_agent) = configuration.user_agent {
204        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
205    }
206    if let Some(ref token) = configuration.bearer_access_token {
207        req_builder = req_builder.bearer_auth(token.to_owned());
208    };
209
210    let req = req_builder.build()?;
211    let resp = configuration.client.execute(req).await?;
212
213    let status = resp.status();
214
215    if !status.is_client_error() && !status.is_server_error() {
216        Ok(resp)
217    } else {
218        let content = resp.text().await?;
219        let entity: Option<GetRichMenuImageError> = serde_json::from_str(&content).ok();
220        Err(Error::ResponseError(ResponseContent {
221            status,
222            content,
223            entity,
224        }))
225    }
226}
227
228/// Upload rich menu image
229pub async fn set_rich_menu_image(
230    configuration: &configuration::Configuration,
231    rich_menu_id: &str,
232    body: Option<std::path::PathBuf>,
233) -> Result<(), Error<SetRichMenuImageError>> {
234    // add a prefix to parameters to efficiently prevent name collisions
235    let p_path_rich_menu_id = rich_menu_id;
236    let p_body_body = body;
237
238    let uri_str = format!(
239        "{}/v2/bot/richmenu/{richMenuId}/content",
240        configuration.base_path,
241        richMenuId = crate::apis::urlencode(p_path_rich_menu_id)
242    );
243    let mut req_builder = configuration
244        .client
245        .request(reqwest::Method::POST, &uri_str);
246
247    if let Some(ref user_agent) = configuration.user_agent {
248        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
249    }
250    if let Some(ref token) = configuration.bearer_access_token {
251        req_builder = req_builder.bearer_auth(token.to_owned());
252    };
253    if let Some(param_value) = p_body_body {
254        let file = TokioFile::open(param_value).await?;
255        let stream = FramedRead::new(file, BytesCodec::new());
256        req_builder = req_builder.body(reqwest::Body::wrap_stream(stream));
257    }
258
259    let req = req_builder.build()?;
260    let resp = configuration.client.execute(req).await?;
261
262    let status = resp.status();
263
264    if !status.is_client_error() && !status.is_server_error() {
265        Ok(())
266    } else {
267        let content = resp.text().await?;
268        let entity: Option<SetRichMenuImageError> = serde_json::from_str(&content).ok();
269        Err(Error::ResponseError(ResponseContent {
270            status,
271            content,
272            entity,
273        }))
274    }
275}