binary_option_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, pocketoption::error::PocketOptionError};
8
9#[derive(Error, Debug)]
10pub enum BinaryOptionsToolsError {
11 #[error("PocketOptionError, {0}")]
12 PocketOptionError(#[from] PocketOptionError),
13 #[error("Error sending request, {0}")]
14 WebsocketMessageSendingError(String),
15 #[error("Failed to recieve data from websocket server: {0}")]
16 WebsocketRecievingConnectionError(String),
17 #[error("Websocket connection was closed by the server, {0}")]
18 WebsocketConnectionClosed(String),
19 #[error("Failed to connect to websocket server: {0}")]
20 WebsocketConnectionError(#[from] TungsteniteError),
21 #[error("Failed to send message to websocket sender, {0}")]
22 MessageSendingError(#[from] async_channel::SendError<Message>),
23 #[error("Failed to recieve message from separate thread, {0}")]
24 OneShotRecieverError(#[from] tokio::sync::oneshot::error::RecvError),
25 #[error("Failed to recieve message from request channel, {0}")]
26 ChannelRequestRecievingError(#[from] async_channel::RecvError),
27 #[error("Failed to send message to request channel, {0}")]
28 ChannelRequestSendingError(String),
29 #[error("Failed to send message to websocket sender mspc, {0}")]
30 ThreadMessageSendingErrorMPCS(String),
31 #[error("Error recieving response from server, {0}")]
32 WebSocketMessageError(String),
33 #[error("Failed to parse data: {0}")]
34 GeneralParsingError(String),
35 #[error("TLS Certificate error, {0}")]
36 TLSError(#[from] native_tls::Error),
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}