rustgecko 0.2.2

A Simple SDK for Coingecko API
Documentation
![coingecko](https://github.com/ffindelsberger/rustgecko/actions/workflows/rust.yml/badge.svg)

# CoinGecko API Client for Rust

Simple API Client for CoinGecko written in Rust

## Available endpoint

[Refer to CoinGecko official API](https://www.coingecko.com/api)

|            Endpoint             | Status  | Testing |             Function             |
|:-------------------------------:|:-------:|:-------:|:--------------------------------:|
|              /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        |   WIP   |   WIP   |         EventsCountries          |
|          /events/types          |   WIP   |   WIP   |            EventsType            |
|         /exchange_rates         | ✓ | ✓ |           ExchangeRate           |
|             /global             | ✓ | ✓ |              Global              |

More api Endpoints than listed here will be supported in the Future. As soon as I start working on additional Endpoints
the Table will be updated.

## Shortcut Methods

Some Methods with a lot of boolean Flags have a shorter Version i.E "simple_price_short" for if you just want to
retrieve Some Data and leave the Rest of the Params as their Default.

## Usage

```rust
use rustgecko::client::GeckoClient;

fn main() {
    let client = GeckoClient::default();
}
```

In a Production Setting or when you have a Coingecko Subscription you might want to supply your own Client with
Credentials or with any other additional configuration.

```rust
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");
}
```

## Error Handling

Every 4XX Response is turned into an error of type reqwest::Error and propagated up the call chain.  
For handling reqwest errors reference the Docs -> https://docs.rs/reqwest/0.7.2/reqwest/struct.Error.html

```rust
async fn main() {
    match client.coins_list().await {
        Ok(response) => {
            println!("We got a response :)");
        }
        Err(err) => {
            println!("Oh no we got a 4XX Response or some other kind of reqwest error :(");
        }
    }
}

```

## License

MIT

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.