barter_data/exchange/binance/book/
mod.rs

1use crate::books::Level;
2use rust_decimal::Decimal;
3use serde::{Deserialize, Serialize};
4
5/// Level 1 OrderBook types (top of books).
6pub mod l1;
7
8/// Level 2 OrderBook types.
9pub mod l2;
10
11/// [`Binance`](super::Binance) OrderBook level.
12///
13/// #### Raw Payload Examples
14/// See docs: <https://binance-docs.github.io/apidocs/futures/en/#partial-book-depth-streams>
15/// ```json
16/// ["4.00000200", "12.00000000"]
17/// ```
18#[derive(Clone, Copy, PartialEq, PartialOrd, Debug, Deserialize, Serialize)]
19pub struct BinanceLevel {
20    #[serde(with = "rust_decimal::serde::str")]
21    pub price: Decimal,
22    #[serde(with = "rust_decimal::serde::str")]
23    pub amount: Decimal,
24}
25
26impl From<BinanceLevel> for Level {
27    fn from(level: BinanceLevel) -> Self {
28        Self {
29            price: level.price,
30            amount: level.amount,
31        }
32    }
33}
34
35#[cfg(test)]
36mod tests {
37    use super::*;
38
39    mod de {
40        use super::*;
41        use rust_decimal_macros::dec;
42
43        #[test]
44        fn test_binance_level() {
45            let input = r#"["4.00000200", "12.00000000"]"#;
46            assert_eq!(
47                serde_json::from_str::<BinanceLevel>(input).unwrap(),
48                BinanceLevel {
49                    price: dec!(4.00000200),
50                    amount: dec!(12.0)
51                },
52            )
53        }
54    }
55}