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 2022年12月22日

#2149 in 魔法豆

MIT/Apache

51KB
1K SLoC

coingecko

欢迎并感谢对改进的拉取请求和建议

Rust 的 CoinGecko API 客户端

用 Rust 编写的 CoinGecko 简单 API 客户端

可用端点

参考 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