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