Skip to main content

awc/
error.rs

1//! HTTP client errors
2
3// TODO: figure out how best to expose http::Error vs actix_http::Error
4pub 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// TODO: address display, error, and from impls
16
17/// Websocket client error
18#[derive(Debug, Display, From)]
19pub enum WsClientError {
20    /// Invalid response status
21    #[display("Invalid response status")]
22    InvalidResponseStatus(StatusCode),
23
24    /// Invalid upgrade header
25    #[display("Invalid upgrade header")]
26    InvalidUpgradeHeader,
27
28    /// Invalid connection header
29    #[display("Invalid connection header")]
30    InvalidConnectionHeader(HeaderValue),
31
32    /// Missing Connection header
33    #[display("Missing Connection header")]
34    MissingConnectionHeader,
35
36    /// Missing Sec-Websocket-Accept header
37    #[display("Missing Sec-Websocket-Accept header")]
38    MissingWebSocketAcceptHeader,
39
40    /// Invalid challenge response
41    #[display("Invalid challenge response")]
42    InvalidChallengeResponse([u8; 28], HeaderValue),
43
44    /// Protocol error
45    #[display("{}", _0)]
46    Protocol(WsProtocolError),
47
48    /// Send request error
49    #[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/// A set of errors that can occur during parsing json payloads
68#[derive(Debug, Display, From)]
69pub enum JsonPayloadError {
70    /// Content type error
71    #[display("Content type error")]
72    ContentType,
73    /// Deserialize error
74    #[display("Json deserialize error: {}", _0)]
75    Deserialize(JsonError),
76    /// Payload error
77    #[display("Error that occur during reading payload: {}", _0)]
78    Payload(PayloadError),
79}
80
81impl std::error::Error for JsonPayloadError {}