exc_binance/websocket/protocol/frame/
depth.rs

1use rust_decimal::Decimal;
2use serde::Deserialize;
3
4use crate::websocket::error::WsError;
5
6use super::{StreamFrame, StreamFrameKind};
7
8/// Depth.
9#[derive(Debug, Clone, Deserialize)]
10pub struct Depth {
11    /// Event type.
12    #[serde(rename = "e")]
13    pub event: String,
14    /// Event time.
15    #[serde(rename = "E")]
16    pub event_timestamp: i64,
17    /// Symbol.
18    #[serde(rename = "s")]
19    pub symbol: String,
20    /// Trade time.
21    #[serde(rename = "T")]
22    pub trade_timestamp: i64,
23    /// Update ID.
24    #[serde(rename = "u")]
25    pub id: usize,
26    /// Bids.
27    #[serde(rename = "b")]
28    pub bids: Vec<(Decimal, Decimal)>,
29    /// Asks.
30    #[serde(rename = "a")]
31    pub asks: Vec<(Decimal, Decimal)>,
32}
33
34impl TryFrom<StreamFrame> for Depth {
35    type Error = WsError;
36
37    fn try_from(frame: StreamFrame) -> Result<Self, Self::Error> {
38        if let StreamFrameKind::Depth(t) = frame.data {
39            Ok(t)
40        } else {
41            Err(WsError::UnexpectedFrame(anyhow::anyhow!("{frame:?}")))
42        }
43    }
44}