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