binary_options_tools_core/general/
traits.rs

1use 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]
57/// Every struct that implements MessageHandler will recieve a message and should return
58pub 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    // type Uris: Iterator<Item = String>;
73
74    async fn connect(
75        &self,
76        creds: Self::Creds,
77    ) -> BinaryOptionsResult<WebSocketStream<MaybeTlsStream<TcpStream>>>;
78}