1use cxmr_currency::CurrencyPair;
4use cxmr_exchanges::{Order, OrderSide};
5
6#[derive(Serialize, Deserialize, PartialEq, Clone, Debug)]
8pub struct OrderBook {
9 #[serde(skip_serializing_if = "Option::is_none")]
11 pub pair: Option<CurrencyPair>,
12 pub asks: Vec<OrderRate>,
14 pub bids: Vec<OrderRate>,
16}
17
18impl OrderBook {
19 pub fn push_order(&mut self, order: Order) {
21 match order.side {
22 OrderSide::Ask => self.asks.push(order.into()),
23 OrderSide::Bid => self.bids.push(order.into()),
24 }
25 }
26}
27
28#[derive(Serialize, Deserialize, PartialEq, Clone, Debug)]
30pub struct OrderRate {
31 #[serde(rename = "r")]
33 pub rate: f64,
34 #[serde(rename = "a")]
36 pub amount: f64,
37}
38
39impl From<Order> for OrderRate {
40 fn from(order: Order) -> Self {
41 OrderRate {
42 rate: order.rate,
43 amount: order.amount,
44 }
45 }
46}