drm_core/websocket/
traits.rs1use async_trait::async_trait;
2use futures::Stream;
3use std::pin::Pin;
4
5use crate::error::WebSocketError;
6use crate::models::Orderbook;
7
8pub type OrderbookStream = Pin<Box<dyn Stream<Item = Result<Orderbook, WebSocketError>> + Send>>;
9
10#[derive(Debug, Clone, Copy, PartialEq, Eq)]
11pub enum WebSocketState {
12 Disconnected,
13 Connecting,
14 Connected,
15 Reconnecting,
16 Closed,
17}
18
19#[async_trait]
20pub trait OrderBookWebSocket: Send + Sync {
21 async fn connect(&mut self) -> Result<(), WebSocketError>;
22
23 async fn disconnect(&mut self) -> Result<(), WebSocketError>;
24
25 async fn subscribe(&mut self, market_id: &str) -> Result<(), WebSocketError>;
26
27 async fn unsubscribe(&mut self, market_id: &str) -> Result<(), WebSocketError>;
28
29 fn state(&self) -> WebSocketState;
30
31 async fn orderbook_stream(
32 &mut self,
33 market_id: &str,
34 ) -> Result<OrderbookStream, WebSocketError>;
35}