binary_options_tools_core/
error.rs1use 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}