1use base64::DecodeError;
2use bytes::Bytes;
3use reqwest::header::{InvalidHeaderName, InvalidHeaderValue};
4use reqwest::Error as HttpError;
5use serde_json::Error as JsonError;
6use std::io::Error as IoError;
7use std::str::Utf8Error;
8use thiserror::Error;
9use tokio::sync::mpsc::error::SendError;
10use tungstenite::Error as WsError;
11
12use crate::Event;
13
14#[derive(Error, Debug)]
15#[non_exhaustive]
16pub enum Error {
17 #[error("Invalid packet type: {0}")]
18 InvalidPacketType(u8),
19 #[error("Invalid packet")]
20 InvalidPacket(),
21 #[error("Incomplete packet")]
22 IncompletePacket(),
23 #[error("Invalid base 64: {0}")]
24 InvalidBase64(#[from] DecodeError),
25 #[error("Invalid json: {0}")]
26 InvalidJson(#[from] JsonError),
27 #[error("Invalid header name")]
28 InvalidHeaderNameFromReqwest(#[from] InvalidHeaderName),
29 #[error("Invalid header value")]
30 InvalidHeaderValueFromReqwest(#[from] InvalidHeaderValue),
31 #[error("Invalid hand shake: {0}")]
32 InvalidHandShake(String),
33 #[error("Invalid url scheme: {0}")]
34 InvalidUrlScheme(String),
35 #[error("Io Error: {0}")]
36 IoError(#[from] IoError),
37 #[error("Websocket Error: {0}")]
38 WsError(#[from] WsError),
39 #[error("Utf8 error: {0}")]
40 Utf8Error(#[from] Utf8Error),
41 #[error("Http error: {0}")]
42 HttpError(#[from] HttpError),
43 #[error("Invalid http resposne status: {0}")]
44 InvalidHttpResponseStatus(u16),
45 #[error("Send error: {0}")]
46 SendError(#[from] SendError<Bytes>),
47 #[error("Event Send error: {0}")]
48 EventSendError(#[from] SendError<Event>),
49 #[error("Server not allow upgrading to websocket")]
50 IllegalWebsocketUpgrade(),
51 #[error("Illegal action before open")]
52 IllegalActionBeforeOpen(),
53}
54
55pub(crate) type Result<T> = std::result::Result<T, Error>;