binary_options_tools_core/
error.rs

1use std::time::Duration;
2
3use thiserror::Error;
4
5use tokio_tungstenite::tungstenite::{http, Error as TungsteniteError, Message};
6
7use crate::general::traits::MessageTransfer;
8
9#[derive(Error, Debug)]
10pub enum BinaryOptionsToolsError {
11    #[error("Failed to parse recieved data: {0}")]
12    SerdeGeneralParsingError(#[from] serde_json::Error),
13    #[error("{platform} Error, {error}")]
14    BinaryOptionsTradingError { platform: String, error: String },
15    #[error("Error sending request, {0}")]
16    WebsocketMessageSendingError(String),
17    #[error("Failed to recieve data from websocket server: {0}")]
18    WebsocketRecievingConnectionError(String),
19    #[error("Websocket connection was closed by the server, {0}")]
20    WebsocketConnectionClosed(String),
21    #[error("Failed to connect to websocket server: {0}")]
22    WebsocketConnectionError(#[from] TungsteniteError),
23    #[error("Failed to send message to websocket sender, {0}")]
24    MessageSendingError(#[from] async_channel::SendError<Message>),
25    #[error("Failed to recieve message from separate thread, {0}")]
26    OneShotRecieverError(#[from] tokio::sync::oneshot::error::RecvError),
27    #[error("Failed to recieve message from request channel, {0}")]
28    ChannelRequestRecievingError(#[from] async_channel::RecvError),
29    #[error("Failed to send message to request channel, {0}")]
30    ChannelRequestSendingError(String),
31    #[error("Failed to send message to websocket sender mspc, {0}")]
32    ThreadMessageSendingErrorMPCS(String),
33    #[error("Error recieving response from server, {0}")]
34    WebSocketMessageError(String),
35    #[error("Failed to parse data: {0}")]
36    GeneralParsingError(String),
37    #[error("Error making http request: {0}")]
38    HTTPError(#[from] http::Error),
39    #[error("Unallowed operation, {0}")]
40    Unallowed(String),
41    #[error("Failed to join thread, {0}")]
42    TaskJoinError(#[from] tokio::task::JoinError),
43    #[error("Failed to execute '{task}' task before the maximum allowed time of '{duration:?}'")]
44    TimeoutError { task: String, duration: Duration },
45    #[error("Failed to parse duration, error {0}")]
46    ChronoDurationParsingError(#[from] chrono::OutOfRangeError),
47}
48
49pub type BinaryOptionsResult<T> = Result<T, BinaryOptionsToolsError>;
50
51impl<Transfer> From<Transfer> for BinaryOptionsToolsError
52where
53    Transfer: MessageTransfer,
54{
55    fn from(value: Transfer) -> Self {
56        let error = value.to_error();
57        Self::WebsocketMessageSendingError(error.to_string())
58    }
59}