exc_binance/websocket/protocol/frame/
depth.rs1use rust_decimal::Decimal;
2use serde::Deserialize;
3
4use crate::websocket::error::WsError;
5
6use super::{StreamFrame, StreamFrameKind};
7
8#[derive(Debug, Clone, Deserialize)]
10pub struct Depth {
11 #[serde(rename = "e")]
13 pub event: String,
14 #[serde(rename = "E")]
16 pub event_timestamp: i64,
17 #[serde(rename = "s")]
19 pub symbol: String,
20 #[serde(rename = "T")]
22 pub trade_timestamp: i64,
23 #[serde(rename = "u")]
25 pub id: usize,
26 #[serde(rename = "b")]
28 pub bids: Vec<(Decimal, Decimal)>,
29 #[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}