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, ¶ms);
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, ¶ms);
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, ¶ms);
127 response
128}