1use reqwest;
13use serde::{Deserialize, Serialize, de::Error as _};
14use crate::{apis::ResponseContent, models};
15use super::{Error, configuration, ContentType};
16
17
18#[derive(Debug, Clone, Serialize, Deserialize)]
20#[serde(untagged)]
21pub enum DeleteMessageError {
22 Status400(models::ErrorResponse),
23 Status401(models::ErrorResponse),
24 Status404(models::ErrorResponse),
25 UnknownValue(serde_json::Value),
26}
27
28#[derive(Debug, Clone, Serialize, Deserialize)]
30#[serde(untagged)]
31pub enum GetMessageError {
32 Status401(models::ErrorResponse),
33 Status404(models::ErrorResponse),
34 UnknownValue(serde_json::Value),
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize)]
39#[serde(untagged)]
40pub enum GetMessageVersionsError {
41 Status401(models::ErrorResponse),
42 Status404(models::ErrorResponse),
43 UnknownValue(serde_json::Value),
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize)]
48#[serde(untagged)]
49pub enum GetMessagesError {
50 Status400(models::ErrorResponse),
51 Status401(models::ErrorResponse),
52 Status404(models::ErrorResponse),
53 UnknownValue(serde_json::Value),
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize)]
58#[serde(untagged)]
59pub enum SendMessageError {
60 Status400(models::ErrorResponse),
61 Status401(models::ErrorResponse),
62 Status422(models::ErrorResponse),
63 UnknownValue(serde_json::Value),
64}
65
66#[derive(Debug, Clone, Serialize, Deserialize)]
68#[serde(untagged)]
69pub enum UpdateMessageError {
70 Status400(models::ErrorResponse),
71 Status401(models::ErrorResponse),
72 Status404(models::ErrorResponse),
73 UnknownValue(serde_json::Value),
74}
75
76
77pub async fn delete_message(configuration: &configuration::Configuration, room_name: &str, serial: &str, x_ably_version: Option<&str>, idempotency_key: Option<&str>, delete_message_request: Option<models::DeleteMessageRequest>) -> Result<models::Message, Error<DeleteMessageError>> {
79 let p_path_room_name = room_name;
81 let p_path_serial = serial;
82 let p_header_x_ably_version = x_ably_version;
83 let p_query_idempotency_key = idempotency_key;
84 let p_body_delete_message_request = delete_message_request;
85
86 let uri_str = format!("{}/chat/v4/rooms/{roomName}/messages/{serial}/delete", configuration.base_path, roomName=crate::apis::urlencode(p_path_room_name), serial=crate::apis::urlencode(p_path_serial));
87 let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
88
89 if let Some(ref param_value) = p_query_idempotency_key {
90 req_builder = req_builder.query(&[("idempotencyKey", ¶m_value.to_string())]);
91 }
92 if let Some(ref user_agent) = configuration.user_agent {
93 req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
94 }
95 if let Some(param_value) = p_header_x_ably_version {
96 req_builder = req_builder.header("X-Ably-Version", param_value.to_string());
97 }
98 if let Some(ref auth_conf) = configuration.basic_auth {
99 req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
100 };
101 if let Some(ref token) = configuration.bearer_access_token {
102 req_builder = req_builder.bearer_auth(token.to_owned());
103 };
104 req_builder = req_builder.json(&p_body_delete_message_request);
105
106 let req = req_builder.build()?;
107 let resp = configuration.client.execute(req).await?;
108
109 let status = resp.status();
110 let content_type = resp
111 .headers()
112 .get("content-type")
113 .and_then(|v| v.to_str().ok())
114 .unwrap_or("application/octet-stream");
115 let content_type = super::ContentType::from(content_type);
116
117 if !status.is_client_error() && !status.is_server_error() {
118 let content = resp.text().await?;
119 match content_type {
120 ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
121 ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::Message`"))),
122 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::Message`")))),
123 }
124 } else {
125 let content = resp.text().await?;
126 let entity: Option<DeleteMessageError> = serde_json::from_str(&content).ok();
127 Err(Error::ResponseError(ResponseContent { status, content, entity }))
128 }
129}
130
131pub async fn get_message(configuration: &configuration::Configuration, room_name: &str, serial: &str, x_ably_version: Option<&str>) -> Result<models::Message, Error<GetMessageError>> {
133 let p_path_room_name = room_name;
135 let p_path_serial = serial;
136 let p_header_x_ably_version = x_ably_version;
137
138 let uri_str = format!("{}/chat/v4/rooms/{roomName}/messages/{serial}", configuration.base_path, roomName=crate::apis::urlencode(p_path_room_name), serial=crate::apis::urlencode(p_path_serial));
139 let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
140
141 if let Some(ref user_agent) = configuration.user_agent {
142 req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
143 }
144 if let Some(param_value) = p_header_x_ably_version {
145 req_builder = req_builder.header("X-Ably-Version", param_value.to_string());
146 }
147 if let Some(ref auth_conf) = configuration.basic_auth {
148 req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
149 };
150 if let Some(ref token) = configuration.bearer_access_token {
151 req_builder = req_builder.bearer_auth(token.to_owned());
152 };
153
154 let req = req_builder.build()?;
155 let resp = configuration.client.execute(req).await?;
156
157 let status = resp.status();
158 let content_type = resp
159 .headers()
160 .get("content-type")
161 .and_then(|v| v.to_str().ok())
162 .unwrap_or("application/octet-stream");
163 let content_type = super::ContentType::from(content_type);
164
165 if !status.is_client_error() && !status.is_server_error() {
166 let content = resp.text().await?;
167 match content_type {
168 ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
169 ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::Message`"))),
170 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::Message`")))),
171 }
172 } else {
173 let content = resp.text().await?;
174 let entity: Option<GetMessageError> = serde_json::from_str(&content).ok();
175 Err(Error::ResponseError(ResponseContent { status, content, entity }))
176 }
177}
178
179pub async fn get_message_versions(configuration: &configuration::Configuration, room_name: &str, serial: &str, x_ably_version: Option<&str>) -> Result<Vec<models::Message>, Error<GetMessageVersionsError>> {
181 let p_path_room_name = room_name;
183 let p_path_serial = serial;
184 let p_header_x_ably_version = x_ably_version;
185
186 let uri_str = format!("{}/chat/v4/rooms/{roomName}/messages/{serial}/versions", configuration.base_path, roomName=crate::apis::urlencode(p_path_room_name), serial=crate::apis::urlencode(p_path_serial));
187 let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
188
189 if let Some(ref user_agent) = configuration.user_agent {
190 req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
191 }
192 if let Some(param_value) = p_header_x_ably_version {
193 req_builder = req_builder.header("X-Ably-Version", param_value.to_string());
194 }
195 if let Some(ref auth_conf) = configuration.basic_auth {
196 req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
197 };
198 if let Some(ref token) = configuration.bearer_access_token {
199 req_builder = req_builder.bearer_auth(token.to_owned());
200 };
201
202 let req = req_builder.build()?;
203 let resp = configuration.client.execute(req).await?;
204
205 let status = resp.status();
206 let content_type = resp
207 .headers()
208 .get("content-type")
209 .and_then(|v| v.to_str().ok())
210 .unwrap_or("application/octet-stream");
211 let content_type = super::ContentType::from(content_type);
212
213 if !status.is_client_error() && !status.is_server_error() {
214 let content = resp.text().await?;
215 match content_type {
216 ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
217 ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec<models::Message>`"))),
218 ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `Vec<models::Message>`")))),
219 }
220 } else {
221 let content = resp.text().await?;
222 let entity: Option<GetMessageVersionsError> = serde_json::from_str(&content).ok();
223 Err(Error::ResponseError(ResponseContent { status, content, entity }))
224 }
225}
226
227pub async fn get_messages(configuration: &configuration::Configuration, room_name: &str, x_ably_version: Option<&str>, start: Option<i64>, end: Option<i64>, direction: Option<&str>, limit: Option<i32>, from_serial: Option<&str>) -> Result<Vec<models::Message>, Error<GetMessagesError>> {
229 let p_path_room_name = room_name;
231 let p_header_x_ably_version = x_ably_version;
232 let p_query_start = start;
233 let p_query_end = end;
234 let p_query_direction = direction;
235 let p_query_limit = limit;
236 let p_query_from_serial = from_serial;
237
238 let uri_str = format!("{}/chat/v4/rooms/{roomName}/messages", configuration.base_path, roomName=crate::apis::urlencode(p_path_room_name));
239 let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
240
241 if let Some(ref param_value) = p_query_start {
242 req_builder = req_builder.query(&[("start", ¶m_value.to_string())]);
243 }
244 if let Some(ref param_value) = p_query_end {
245 req_builder = req_builder.query(&[("end", ¶m_value.to_string())]);
246 }
247 if let Some(ref param_value) = p_query_direction {
248 req_builder = req_builder.query(&[("direction", ¶m_value.to_string())]);
249 }
250 if let Some(ref param_value) = p_query_limit {
251 req_builder = req_builder.query(&[("limit", ¶m_value.to_string())]);
252 }
253 if let Some(ref param_value) = p_query_from_serial {
254 req_builder = req_builder.query(&[("fromSerial", ¶m_value.to_string())]);
255 }
256 if let Some(ref user_agent) = configuration.user_agent {
257 req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
258 }
259 if let Some(param_value) = p_header_x_ably_version {
260 req_builder = req_builder.header("X-Ably-Version", param_value.to_string());
261 }
262 if let Some(ref auth_conf) = configuration.basic_auth {
263 req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
264 };
265 if let Some(ref token) = configuration.bearer_access_token {
266 req_builder = req_builder.bearer_auth(token.to_owned());
267 };
268
269 let req = req_builder.build()?;
270 let resp = configuration.client.execute(req).await?;
271
272 let status = resp.status();
273 let content_type = resp
274 .headers()
275 .get("content-type")
276 .and_then(|v| v.to_str().ok())
277 .unwrap_or("application/octet-stream");
278 let content_type = super::ContentType::from(content_type);
279
280 if !status.is_client_error() && !status.is_server_error() {
281 let content = resp.text().await?;
282 match content_type {
283 ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
284 ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec<models::Message>`"))),
285 ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `Vec<models::Message>`")))),
286 }
287 } else {
288 let content = resp.text().await?;
289 let entity: Option<GetMessagesError> = serde_json::from_str(&content).ok();
290 Err(Error::ResponseError(ResponseContent { status, content, entity }))
291 }
292}
293
294pub async fn send_message(configuration: &configuration::Configuration, room_name: &str, send_message_request: models::SendMessageRequest, x_ably_version: Option<&str>, idempotency_key: Option<&str>) -> Result<models::Message, Error<SendMessageError>> {
296 let p_path_room_name = room_name;
298 let p_body_send_message_request = send_message_request;
299 let p_header_x_ably_version = x_ably_version;
300 let p_query_idempotency_key = idempotency_key;
301
302 let uri_str = format!("{}/chat/v4/rooms/{roomName}/messages", configuration.base_path, roomName=crate::apis::urlencode(p_path_room_name));
303 let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
304
305 if let Some(ref param_value) = p_query_idempotency_key {
306 req_builder = req_builder.query(&[("idempotencyKey", ¶m_value.to_string())]);
307 }
308 if let Some(ref user_agent) = configuration.user_agent {
309 req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
310 }
311 if let Some(param_value) = p_header_x_ably_version {
312 req_builder = req_builder.header("X-Ably-Version", param_value.to_string());
313 }
314 if let Some(ref auth_conf) = configuration.basic_auth {
315 req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
316 };
317 if let Some(ref token) = configuration.bearer_access_token {
318 req_builder = req_builder.bearer_auth(token.to_owned());
319 };
320 req_builder = req_builder.json(&p_body_send_message_request);
321
322 let req = req_builder.build()?;
323 let resp = configuration.client.execute(req).await?;
324
325 let status = resp.status();
326 let content_type = resp
327 .headers()
328 .get("content-type")
329 .and_then(|v| v.to_str().ok())
330 .unwrap_or("application/octet-stream");
331 let content_type = super::ContentType::from(content_type);
332
333 if !status.is_client_error() && !status.is_server_error() {
334 let content = resp.text().await?;
335 match content_type {
336 ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
337 ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::Message`"))),
338 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::Message`")))),
339 }
340 } else {
341 let content = resp.text().await?;
342 let entity: Option<SendMessageError> = serde_json::from_str(&content).ok();
343 Err(Error::ResponseError(ResponseContent { status, content, entity }))
344 }
345}
346
347pub async fn update_message(configuration: &configuration::Configuration, room_name: &str, serial: &str, update_message_request: models::UpdateMessageRequest, x_ably_version: Option<&str>, idempotency_key: Option<&str>) -> Result<models::Message, Error<UpdateMessageError>> {
349 let p_path_room_name = room_name;
351 let p_path_serial = serial;
352 let p_body_update_message_request = update_message_request;
353 let p_header_x_ably_version = x_ably_version;
354 let p_query_idempotency_key = idempotency_key;
355
356 let uri_str = format!("{}/chat/v4/rooms/{roomName}/messages/{serial}", configuration.base_path, roomName=crate::apis::urlencode(p_path_room_name), serial=crate::apis::urlencode(p_path_serial));
357 let mut req_builder = configuration.client.request(reqwest::Method::PUT, &uri_str);
358
359 if let Some(ref param_value) = p_query_idempotency_key {
360 req_builder = req_builder.query(&[("idempotencyKey", ¶m_value.to_string())]);
361 }
362 if let Some(ref user_agent) = configuration.user_agent {
363 req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
364 }
365 if let Some(param_value) = p_header_x_ably_version {
366 req_builder = req_builder.header("X-Ably-Version", param_value.to_string());
367 }
368 if let Some(ref auth_conf) = configuration.basic_auth {
369 req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
370 };
371 if let Some(ref token) = configuration.bearer_access_token {
372 req_builder = req_builder.bearer_auth(token.to_owned());
373 };
374 req_builder = req_builder.json(&p_body_update_message_request);
375
376 let req = req_builder.build()?;
377 let resp = configuration.client.execute(req).await?;
378
379 let status = resp.status();
380 let content_type = resp
381 .headers()
382 .get("content-type")
383 .and_then(|v| v.to_str().ok())
384 .unwrap_or("application/octet-stream");
385 let content_type = super::ContentType::from(content_type);
386
387 if !status.is_client_error() && !status.is_server_error() {
388 let content = resp.text().await?;
389 match content_type {
390 ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
391 ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::Message`"))),
392 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::Message`")))),
393 }
394 } else {
395 let content = resp.text().await?;
396 let entity: Option<UpdateMessageError> = serde_json::from_str(&content).ok();
397 Err(Error::ResponseError(ResponseContent { status, content, entity }))
398 }
399}
400