Skip to main content

e_imzo/
error.rs

1use native_tls::TlsStream;
2use std::io;
3use std::net::TcpStream;
4use thiserror::Error;
5use tungstenite::ClientHandshake;
6
7/// Result type for this crate's use.
8///
9/// Instead of using Rust's defaulted Result type, we abstracted
10/// Result type to accept a single type parameter by defaulting
11/// our error type
12pub type Result<T, E = EIMZOError> = std::result::Result<T, E>;
13
14/// E-IMZO crate's error type collection.
15#[derive(Error, Debug)]
16pub enum EIMZOError {
17    #[error("A websocket server went down: {0}")]
18    Io(#[from] io::Error),
19    #[error("JsonParse error: {0}")]
20    JsonParse(#[from] serde_json::Error),
21    #[error("UrlParseError  error: {0}")]
22    UrlParseError(#[from] url::ParseError),
23    // native_tls
24    #[error("TlsError  error: {0}")]
25    TlsError(#[from] native_tls::Error),
26    #[error("TlsHandshakeError  error: {0}")]
27    TlsHandshakeError(#[from] native_tls::HandshakeError<TcpStream>),
28    #[error("HandshakeError error: {0}")]
29    HandshakeError(#[from] tungstenite::HandshakeError<ClientHandshake<TlsStream<TcpStream>>>),
30
31    #[error("Websocket error: {0}")]
32    Websocket(#[from] tungstenite::Error),
33    #[error(
34        "Server closed the connection. Maybe reconnect again with `EIMZO::new()`,
35      {0:?}"
36    )]
37    WebsocketClosed(Option<tungstenite::protocol::CloseFrame>),
38    #[error(
39        "Return type is not tungstenite::Message, it's something Binary or Frame.
40      Other Text, Close, Ping, Pong cases handled on client.rs
41      {0:?}"
42    )]
43    NotTextWebsocketMessage(tungstenite::Message),
44
45    #[error("Error while changing SDK language {0}")]
46    LocaleError(#[from] locale_rs::error::LocaleError),
47
48    /// To be used only if you get despaired.
49    #[error("Something aggressive is going on")]
50    Unknown,
51}