1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
use crate::{types::InnerError, CometdClient, CometdError, CometdResult};
use hyper::StatusCode;
use serde_json::json;
impl CometdClient {
pub async fn disconnect(&self) -> CometdResult<()> {
let client_id = self
.client_id
.swap(None)
.ok_or_else(|| CometdError::connect_error(InnerError::MissingClientId))?;
let id = self.next_id();
let body = json!([{
"id": id,
"channel": "/meta/disconnect",
"clientId": client_id
}])
.to_string();
let cookie = self.cookie.swap(None);
let request_builder =
self.create_request_builder_with_cookie(&self.disconnect_endpoint, cookie);
let response = self
.send_request_response(request_builder, body, CometdError::disconnect_error)
.await?;
match response.status() {
StatusCode::BAD_REQUEST => Ok(()),
code => Err(CometdError::disconnect_error(InnerError::WrongResponse(
format!("Unknown status code: {code}").into(),
))),
}
}
}