cxmr_feeds/
orderbook.rs

1//! Crypto-bank feeds orderbook primitives.
2
3use cxmr_currency::CurrencyPair;
4use cxmr_exchanges::{Order, OrderSide};
5
6/// Order book.
7#[derive(Serialize, Deserialize, PartialEq, Clone, Debug)]
8pub struct OrderBook {
9    /// Currency pair.
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub pair: Option<CurrencyPair>,
12    /// Ask orders.
13    pub asks: Vec<OrderRate>,
14    /// Bid orders.
15    pub bids: Vec<OrderRate>,
16}
17
18impl OrderBook {
19    /// Inserts order to order book.
20    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/// Simple order rate and volume.
29#[derive(Serialize, Deserialize, PartialEq, Clone, Debug)]
30pub struct OrderRate {
31    /// Price rate is a price of a unit.
32    #[serde(rename = "r")]
33    pub rate: f64,
34    /// Order amount.
35    #[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}