drm_core/websocket/
traits.rs

1use 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}