1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//! Poloniex exchange info.

use hashbrown::HashMap;

use cxmr_api_clients_errors::Error;
use cxmr_currency::CurrencyPair;
use cxmr_exchanges::{Exchange, ExchangeInfo, MarketInfo, MarketStatus};

pub fn deserialize_exchange_info<R: std::io::Read>(rdr: R) -> Result<ExchangeInfo, Error> {
    let markets: HashMap<String, BncTicker> = serde_json::from_reader(rdr)?;
    let markets = markets
        .into_iter()
        .map(|(pair, ticker)| {
            Ok(MarketInfo {
                pair: CurrencyPair::split_reversed(&pair)?,
                status: if ticker.is_frozen == "0" {
                    MarketStatus::Trading
                } else {
                    MarketStatus::Halt
                },
                filters: vec![],
                order_types: vec![],
            })
        })
        .collect::<Result<Vec<MarketInfo>, Error>>()?;
    Ok(ExchangeInfo {
        exchange: Exchange::Poloniex,
        markets: markets,
        limits: vec![],
    })
}

#[derive(Deserialize)]
pub struct BncTicker {
    #[serde(rename = "id")]
    _id: usize,
    #[serde(rename = "isFrozen")]
    is_frozen: String,
}