rust_gecko/
exchanges.rs

1use crate::gecko;
2use crate::types::Response;
3use serde_json;
4
5pub enum Depth {
6    CostToMoveUpUsd,
7    CostToMoveDownUsd,
8}
9
10impl Depth {
11    pub fn as_str(&self) -> &'static str {
12        match self {
13            Depth::CostToMoveUpUsd => "cost_to_move_up_usd",
14            Depth::CostToMoveDownUsd => "cost_to_move_down_usd",
15        }
16    }
17}
18
19pub enum Order {
20    TrustScoreDesc,
21    TrustScoreAsc,
22    VolumeDesc,
23}
24
25impl Order {
26    pub fn as_str(&self) -> &'static str {
27        match self {
28            Order::TrustScoreDesc => "trust_score_desc",
29            Order::TrustScoreAsc => "trust_score_asc",
30            Order::VolumeDesc => "volume_desc",
31        }
32    }
33}
34
35pub fn get(per_page: Option<usize>, page: Option<usize>) -> Response<serde_json::Value> {
36    let url = String::from("/exchanges");
37    let mut params = String::from("?");
38
39    params = gecko::append_if(
40        &mut params,
41        !per_page.is_none(),
42        Some(&["per_page", &per_page.unwrap().to_string()].join("=")),
43        None,
44    );
45
46    params = gecko::append_if(
47        &mut params,
48        !page.is_none(),
49        Some(&["page", &page.unwrap().to_string()].join("=")),
50        None,
51    );
52
53    let response = gecko::get_request(&url, &params);
54    response
55}
56pub fn list() -> Response<serde_json::Value> {
57    let response = gecko::get_request("/exchanges/list", "");
58    response
59}
60
61pub fn by_id(id: &str) -> Response<serde_json::Value> {
62    let url = String::from(["/exchanges", id].join("="));
63    let response = gecko::get_request(&url, "");
64    response
65}
66
67pub fn tickers(
68    id: &str,
69    coin_ids: Option<Vec<&str>>,
70    include_exchange_logo: Option<bool>,
71    page: Option<usize>,
72    depth: Option<Depth>,
73    order: Option<Order>,
74) -> Response<serde_json::Value> {
75    let url = String::from(["/exchanges/", id, "/tickers"].join("/"));
76    let mut params = String::from("?");
77
78    params = gecko::append_if(
79        &mut params,
80        !coin_ids.is_none(),
81        Some(&["coin_ids", &gecko::vec_str_2_comma_str(coin_ids.unwrap())].join("=")),
82        None,
83    );
84
85    params = gecko::append_if(
86        &mut params,
87        !include_exchange_logo.is_none(),
88        Some(
89            &[
90                "include_exchange_logo",
91                &include_exchange_logo.unwrap().to_string(),
92            ]
93            .join("="),
94        ),
95        None,
96    );
97
98    params = gecko::append_if(
99        &mut params,
100        !page.is_none(),
101        Some(&["page", &page.unwrap().to_string()].join("=")),
102        None,
103    );
104
105    params = gecko::append_if(
106        &mut params,
107        !depth.is_none(),
108        Some(&["depth", &depth.unwrap().as_str()].join("=")),
109        None,
110    );
111
112    params = gecko::append_if(
113        &mut params,
114        !order.is_none(),
115        Some(&["order", &order.unwrap().as_str()].join("=")),
116        None,
117    );
118
119    let response = gecko::get_request(&url, &params);
120    response
121}
122
123pub fn volume_chart(id: &str, days: usize) -> Response<serde_json::Value> {
124    let url = String::from(["/exchanges/", id, "/volume_chart"].join("/"));
125    let params = format!("?days={}", days);
126    let response = gecko::get_request(&url, &params);
127    response
128}