binary_option_tools_core/general/
traits.rs1use core::{error, fmt, hash};
2
3use async_channel::Sender;
4use async_trait::async_trait;
5use serde::{de::DeserializeOwned, Serialize};
6use tokio::net::TcpStream;
7use tokio_tungstenite::{tungstenite::Message, MaybeTlsStream, WebSocketStream};
8
9use crate::error::BinaryOptionsResult;
10
11use super::{
12 client::SenderMessage,
13 types::{Data, MessageType, UserRequest},
14};
15
16pub trait Credentials: Clone + Send + Sync {}
17
18#[async_trait]
19pub trait DataHandler: Clone + Send + Sync {
20 type Transfer: MessageTransfer;
21
22 async fn update(&self, message: &Self::Transfer) -> BinaryOptionsResult<()>;
23}
24
25#[async_trait]
26pub trait Callback: Clone + Send + Sync {
27 type T: DataHandler;
28 type Transfer: MessageTransfer;
29
30 async fn call(
31 &self,
32 data: Data<Self::T, Self::Transfer>,
33 sender: &SenderMessage<Self::Transfer>,
34 ) -> BinaryOptionsResult<()>;
35}
36
37pub trait MessageTransfer:
38 DeserializeOwned + Clone + Into<Message> + Send + Sync + error::Error + fmt::Debug + fmt::Display
39{
40 type Error: Into<Self> + Clone + error::Error;
41 type TransferError: error::Error;
42 type Info: MessageInformation;
43
44 fn info(&self) -> Self::Info;
45
46 fn error(&self) -> Option<Self::Error>;
47
48 fn to_error(&self) -> Self::TransferError;
49
50 fn user_request(&self) -> Option<UserRequest<Self>>;
51
52 fn new_user(request: UserRequest<Self>) -> Self;
53
54 fn error_info(&self) -> Option<Vec<Self::Info>>;
55}
56
57pub trait MessageInformation:
58 Serialize + DeserializeOwned + Clone + Send + Sync + Eq + hash::Hash + fmt::Debug + fmt::Display
59{
60 fn none(&self) -> Self;
61}
62
63#[async_trait]
64pub trait MessageHandler: Clone + Send + Sync {
66 type Transfer: MessageTransfer;
67
68 async fn process_message(
69 &self,
70 message: &Message,
71 previous: &Option<<<Self as MessageHandler>::Transfer as MessageTransfer>::Info>,
72 sender: &Sender<Message>,
73 ) -> BinaryOptionsResult<(Option<MessageType<Self::Transfer>>, bool)>;
74}
75
76#[async_trait]
77pub trait Connect: Clone + Send + Sync {
78 type Creds: Credentials;
79 async fn connect(
82 &self,
83 creds: Self::Creds,
84 ) -> BinaryOptionsResult<WebSocketStream<MaybeTlsStream<TcpStream>>>;
85}