6 个版本
| 0.3.4 | 2023年9月16日 | 
|---|---|
| 0.3.3 | 2023年6月15日 | 
| 0.3.0 | 2023年5月8日 | 
| 0.2.2 | 2022年12月25日 | 
| 0.1.4-BETA |  | 
#2149 in 魔法豆
51KB
 1K  SLoC
欢迎并感谢对改进的拉取请求和建议
Rust 的 CoinGecko API 客户端
用 Rust 编写的 CoinGecko 简单 API 客户端
可用端点
| 端点 | 状态 | 测试 | 功能 | 
|---|---|---|---|
| /ping | ✓ | ping | |
| /simple/price | ✓ | simple_price_short, simple_price | |
| /simple/supported_vs_currencies | ✓ | ✓ | SimpleSupportedVSCurrencies | 
| /coins/list | ✓ | ✓ | CoinsList | 
| /coins/market | ✓ | ✓ | CoinsMarket | 
| /coins/{id} | ✓ | ✓ | CoinsID | 
| /coins/{id}/history | ✓ | ✓ | CoinsIDHistory | 
| /coins/{id}/market_chart | ✓ | ✓ | CoinsIDMarketChart | 
| /events/countries | 进行中 | 进行中 | EventsCountries | 
| /events/types | 进行中 | 进行中 | EventsType | 
| /exchange_rates | ✓ | ✓ | ExchangeRate | 
| /global | ✓ | ✓ | Global | 
未来将支持比这里列出的更多 API 端点。一旦我开始工作于额外的端点,表格将被更新。
rustls 和 OpenSSL/native-tls
默认情况下,这个 Crate 使用 reqwest 的 rustls 后端,如果你需要 native-tls/openSSL,你需要激活 native-tls 功能。
rustgecko = { version = "*" , features = ["native-tls"] }
快捷方法
一些具有许多布尔标志的方法有一个简短版本,例如 "simple_price_short",如果你只想检索一些数据,并将其余参数保留为其默认值。
用法
use rustgecko::client::GeckoClient;
fn main() {
    let client = GeckoClient::default();
}
在生产环境或你有 Coingecko 订阅的情况下,你可能希望提供自己的客户端带有凭证或任何其他附加配置。
use rustgecko::client::GeckoClient;
fn main() {
    use reqwest::header;
    let mut headers = header::HeaderMap::new();
    // Consider marking security-sensitive headers with `set_sensitive`.
    let mut auth_value = header::HeaderValue::from_static("secret");
    auth_value.set_sensitive(true);
    headers.insert("x-cg-pro-api-key", auth_value);
    // get a client builder
    let client = reqwest::Client::builder()
        .default_headers(headers)
        .build()
        .unwrap();
    let _ = GeckoClient::new_with_custom_client(client, "https://some.url");
}
错误处理
每个 4XX 响应都被转换为 reqwest::Error 类型的错误,并传播到调用链。
有关处理 reqwest 错误的信息,请参阅文档 -> https://docs.rs/reqwest/0.7.2/reqwest/struct.Error.html
async fn main() {
    if let Err(err) = GeckoClient::default().exchangerates().await {
        match err.status() {
            Some(StatusCode::TOO_MANY_REQUESTS) => info!("we have to slow down"),
            Some(_) => info!("Something else happened"),
            None => info!("We got an error without a status code"),
        }
    }
}
许可证
MIT
本软件按“原样”提供,不提供任何形式的保证,无论是明示的、暗示的,还是关于适销性、特定用途适用性或非侵权的保证。
依赖项
~8-24MB
~344K SLoC