1pub use actix_http::{
5 error::{HttpError, PayloadError},
6 header::HeaderValue,
7 ws::{HandshakeError as WsHandshakeError, ProtocolError as WsProtocolError},
8 StatusCode,
9};
10
11use derive_more::{Display, From};
12use serde_json::error::Error as JsonError;
13
14pub use crate::client::{ConnectError, FreezeRequestError, InvalidUrl, SendRequestError};
15
16#[derive(Debug, Display, From)]
20pub enum WsClientError {
21 #[display(fmt = "Invalid response status")]
23 InvalidResponseStatus(StatusCode),
24
25 #[display(fmt = "Invalid upgrade header")]
27 InvalidUpgradeHeader,
28
29 #[display(fmt = "Invalid connection header")]
31 InvalidConnectionHeader(HeaderValue),
32
33 #[display(fmt = "Missing Connection header")]
35 MissingConnectionHeader,
36
37 #[display(fmt = "Missing Sec-Websocket-Accept header")]
39 MissingWebSocketAcceptHeader,
40
41 #[display(fmt = "Invalid challenge response")]
43 InvalidChallengeResponse([u8; 28], HeaderValue),
44
45 #[display(fmt = "{}", _0)]
47 Protocol(WsProtocolError),
48
49 #[display(fmt = "{}", _0)]
51 SendRequest(SendRequestError),
52}
53
54impl std::error::Error for WsClientError {}
55
56impl From<InvalidUrl> for WsClientError {
57 fn from(err: InvalidUrl) -> Self {
58 WsClientError::SendRequest(err.into())
59 }
60}
61
62impl From<HttpError> for WsClientError {
63 fn from(err: HttpError) -> Self {
64 WsClientError::SendRequest(err.into())
65 }
66}
67
68#[derive(Debug, Display, From)]
70pub enum JsonPayloadError {
71 #[display(fmt = "Content type error")]
73 ContentType,
74 #[display(fmt = "Json deserialize error: {}", _0)]
76 Deserialize(JsonError),
77 #[display(fmt = "Error that occur during reading payload: {}", _0)]
79 Payload(PayloadError),
80}
81
82impl std::error::Error for JsonPayloadError {}