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::{CometdError, CometdResult, InnerError},
CometdClient,
};
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(None, InnerError::MissingClientId))?;
let body = json!([{
"id": self.next_id(),
"channel": "/meta/disconnect",
"clientId": client_id
}])
.to_string();
let request_builder = self.create_request_builder(&self.disconnect_endpoint);
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(),
))),
}
}
}