line_bot_sdk_messaging_api/apis/
messaging_api_blob_api.rs1use 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#[derive(Debug, Clone, Serialize, Deserialize)]
20#[serde(untagged)]
21pub enum GetMessageContentError {
22 UnknownValue(serde_json::Value),
23}
24
25#[derive(Debug, Clone, Serialize, Deserialize)]
27#[serde(untagged)]
28pub enum GetMessageContentPreviewError {
29 UnknownValue(serde_json::Value),
30}
31
32#[derive(Debug, Clone, Serialize, Deserialize)]
34#[serde(untagged)]
35pub enum GetMessageContentTranscodingByMessageIdError {
36 UnknownValue(serde_json::Value),
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize)]
41#[serde(untagged)]
42pub enum GetRichMenuImageError {
43 UnknownValue(serde_json::Value),
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize)]
48#[serde(untagged)]
49pub enum SetRichMenuImageError {
50 UnknownValue(serde_json::Value),
51}
52
53pub async fn get_message_content(
55 configuration: &configuration::Configuration,
56 message_id: &str,
57) -> Result<reqwest::Response, Error<GetMessageContentError>> {
58 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
93pub async fn get_message_content_preview(
95 configuration: &configuration::Configuration,
96 message_id: &str,
97) -> Result<reqwest::Response, Error<GetMessageContentPreviewError>> {
98 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
133pub 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 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
188pub async fn get_rich_menu_image(
190 configuration: &configuration::Configuration,
191 rich_menu_id: &str,
192) -> Result<reqwest::Response, Error<GetRichMenuImageError>> {
193 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
228pub 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 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}