rust_gecko/
simple.rs

1use crate::gecko;
2use crate::gecko::vec_str_2_comma_str;
3use crate::types::Response;
4use serde_json;
5
6/// Get the current price of any cryptocurrencies in any other supported currencies that you need.
7pub fn price(
8    ids: Vec<&str>,
9    vs_currencies: Vec<&str>,
10    include_market_cap: Option<bool>,
11    include_24hr_vol: Option<bool>,
12    include_24hr_change: Option<bool>,
13    include_last_updated_at: Option<bool>,
14) -> Response<serde_json::Value> {
15    let endpoint = "/simple/price?".to_string();
16    let ids_str: String = ["ids", &vec_str_2_comma_str(ids)].join("=");
17    let vs_currencies_str: String =
18        ["vs_currencies", &vec_str_2_comma_str(vs_currencies)].join("=");
19
20    let mut params = [ids_str, vs_currencies_str].join("&");
21
22    let imc = include_market_cap.unwrap_or(false);
23    let i24v = include_24hr_vol.unwrap_or(false);
24    let i24c = include_24hr_change.unwrap_or(false);
25    let ilu = include_last_updated_at.unwrap_or(false);
26
27    if imc {
28        params.push_str("&include_market_cap=true");
29    }
30    if i24v {
31        params.push_str("&include_24hr_vol=true");
32    }
33
34    if i24c {
35        params.push_str("&include_24hr_change=true");
36    }
37
38    if ilu {
39        params.push_str("&include_last_updated_at=true");
40    }
41
42    let response = gecko::get_request(&endpoint, &params);
43    response
44}
45
46/// Get current price of tokens (using contract addresses) for a given platform in any other currency that you need.
47pub fn token_price(
48    id: &str,
49    contract_addresses: Vec<&str>,
50    vs_currencies: Vec<&str>,
51    include_market_cap: Option<bool>,
52    include_24hr_vol: Option<bool>,
53    include_24hr_change: Option<bool>,
54    include_last_updated_at: Option<bool>,
55) -> Response<serde_json::Value> {
56    let endpoint = ["/simple/token_price/", id, "?"].join("");
57
58    let contract_addresses: String = [
59        "contract_addresses",
60        &vec_str_2_comma_str(contract_addresses),
61    ]
62    .join("=");
63    let vs_currencies_str: String =
64        ["vs_currencies", &vec_str_2_comma_str(vs_currencies)].join("=");
65
66    let mut params = [contract_addresses, vs_currencies_str].join("&");
67
68    let imc = include_market_cap.unwrap_or(false);
69    let i24v = include_24hr_vol.unwrap_or(false);
70    let i24c = include_24hr_change.unwrap_or(false);
71    let ilu = include_last_updated_at.unwrap_or(false);
72
73    if imc {
74        params.push_str("&include_market_cap=true");
75    }
76    if i24v {
77        params.push_str("&include_24hr_vol=true");
78    }
79
80    if i24c {
81        params.push_str("&include_24hr_change=true");
82    }
83
84    if ilu {
85        params.push_str("&include_last_updated_at=true");
86    }
87
88    let response = gecko::get_request(&endpoint, &params);
89    response
90}
91
92/// Get list of supported_vs_currencies.
93pub fn supported_vs_currencies() -> Response<serde_json::Value> {
94    let endpoint = "/simple/supported_vs_currencies";
95    let response = gecko::get_request(&endpoint, "");
96    response
97}