binary_option_tools/pocketoption/
error.rs

1use std::error::Error;
2use std::string::FromUtf8Error;
3
4use super::types::order::PocketMessageFail;
5use super::{parser::message::WebSocketMessage, types::info::MessageInfo};
6use binary_options_tools_core::error::BinaryOptionsToolsError;
7use thiserror::Error;
8// use tokio_tungstenite::tungstenite::Error as TungsteniteError;
9// use tokio_tungstenite::tungstenite::{http, Message};
10
11#[derive(Error, Debug)]
12pub enum PocketOptionError {
13    #[error("BinaryOptionsToolsError, {0}")]
14    BinaryOptionsToolsError(#[from] BinaryOptionsToolsError),
15    #[error("Failed to parse SSID: {0}")]
16    SsidParsingError(String),
17    #[error("Failed to parse data: {0}")]
18    GeneralParsingError(String),
19    // #[error("Error making http request: {0}")]
20    // HTTPError(#[from] http::Error),
21    #[error("TLS Certificate error, {0}")]
22    TLSError(#[from] native_tls::Error),
23    // #[error("Failed to connect to websocket server: {0}")]
24    // WebsocketConnectionError(#[from] TungsteniteError),
25    #[error("Failed to connect to websocket server: {0}")]
26    WebsocketRecievingConnectionError(String),
27    #[error("Websocket connection was closed by the server, {0}")]
28    WebsocketConnectionClosed(String),
29    #[error("Failed to connect to websocket server after multiple attempts, {0}")]
30    WebsocketMultipleAttemptsConnectionError(String),
31    #[error("Failed to parse recieved data to Message: {0}")]
32    WebSocketMessageParsingError(#[from] serde_json::Error),
33    #[error("Failed to process recieved Message: {0}")]
34    WebSocketMessageProcessingError(#[from] anyhow::Error),
35    #[error("Failed to convert bytes to string, {0}")]
36    WebSocketMessageByteSerializationError(#[from] FromUtf8Error),
37    // #[error("Failed to send message to websocket sender, {0}")]
38    // MessageSendingError(#[from] async_channel::SendError<Message>),
39    #[error("Failed to send message to websocket sender, {0}")]
40    ThreadMessageSendingErrorMPCS(#[from] async_channel::SendError<WebSocketMessage>),
41    #[error("Failed to recieve message from separate thread, {0}")]
42    OneShotRecieverError(#[from] tokio::sync::oneshot::error::RecvError),
43    #[error("Failed to send message to websocket sender, {0}")]
44    ThreadMessageSendingError(#[from] WebSocketMessage),
45    #[error("Failed to make request, {0}")]
46    RequestError(#[from] reqwest::Error),
47    #[error("Unexpected error, recieved incorrect WebSocketMessage type, recieved {0}")]
48    UnexpectedIncorrectWebSocketMessage(#[from] MessageInfo),
49    #[error("If you are having this error please contact the developpers, {0}")]
50    UnreachableError(String),
51    #[error("Unallowed operation, {0}")]
52    Unallowed(String),
53    #[error("Error sending request, {0}")]
54    WebsocketMessageSendingError(#[from] PocketMessageFail),
55    #[error("Expected the data to be non-empty for type '{0}'")]
56    EmptyArrayError(String),
57}
58
59pub type PocketResult<T> = Result<T, PocketOptionError>;
60
61impl Error for WebSocketMessage {}
62impl Error for MessageInfo {}
63impl Error for PocketMessageFail {}
64
65impl From<PocketOptionError> for BinaryOptionsToolsError {
66    fn from(value: PocketOptionError) -> Self {
67        BinaryOptionsToolsError::BinaryOptionsTradingError {
68            platform: "Pocket Option".to_string(),
69            error: value.to_string(),
70        }
71    }
72}