rustgecko 0.3.4

A Simple SDK for Coingecko API
Documentation
//TODO : Remove
#![allow(dead_code)]
#![allow(unused_variables)]
extern crate core;

pub mod client;
pub mod model;

#[cfg(test)]
mod test {
    use std::thread;
    use std::time::Duration;

    use log::info;
    use serial_test::serial;
    use time::macros::date;

    use crate::client::GeckoClient;
    use crate::model::queryparams::{MarketOrder, PriceChange};

    fn init() {
        let _ = env_logger::builder().is_test(true).try_init();
    }

    #[tokio::test]
    #[serial]
    async fn ping() {
        init();
        let client = GeckoClient::default();
        let res = client.ping().await.unwrap();
        info!("{:#?}", res);
    }

    #[tokio::test]
    #[serial]
    async fn coins_list() {
        init();
        let client = GeckoClient::default();
        let res = client.coins_list().await.unwrap();
        info!("{:#?}", res);
    }

    async fn coins_market() {
        init();
        let client = GeckoClient::default();
        let bitcoin = client.coins_short("bitcoin").await.unwrap();
        let price_changes = [PriceChange::Days7, PriceChange::Years1, PriceChange::Days30];

        let mut response;
        let mut page = 0;
        loop {
            response = client
                .coins_markets(
                    "usd",
                    None,
                    MarketOrder::MarketCapDesc,
                    Some(&price_changes),
                    true,
                    Some(page),
                )
                .await
                .unwrap();

            if response.is_empty() {
                break;
            };
            page += 1;
            thread::sleep(Duration::from_secs(6));
        }
    }

    async fn coins_id() {
        init();
        let client = GeckoClient::default();
        let list = client.coins_list().await.unwrap();

        for i in 1..list.len() {
            thread::sleep(Duration::from_secs(5));
            let id = &list.get(i).unwrap().id;
            if let Err(error) = client.coins(id, true, true, true, true, true, true).await {
                println!("{}", error);
                break;
            }
        }
    }

    #[tokio::test]
    #[serial]
    async fn coins_history() {
        init();
        let client = GeckoClient::default();

        let res = client
            .coins_history("bitcoin", date!(2022 - 10 - 1), None)
            .await
            .unwrap();
        info!("{:#?}", res);
    }

    #[tokio::test]
    #[serial]
    async fn coins_market_chart() {
        init();
        let client = GeckoClient::default();
        let res = client
            .coins_marketchart("bitcoin", "usd", "max", None)
            .await
            .unwrap();
        info!("{:#?}", res);
    }

    #[tokio::test]
    #[serial]
    async fn asset_platforms() {
        init();
        let client = GeckoClient::default();
        let res = client.assetplatforms(None).await.unwrap();
        info!("{:#?}", res);
    }

    async fn events_countries() {
        todo!();
    }

    async fn events_types() {
        todo!();
    }

    #[tokio::test]
    #[serial]
    async fn exchange_rates() {
        init();
        let client = GeckoClient::default();
        let res = client.exchangerates().await.unwrap();
        info!("{:#?}", res);
    }

    #[tokio::test]
    #[serial]
    async fn global() {
        init();
        let client = GeckoClient::default();
        let res = client.global().await.unwrap();
        info!("{:#?}", res);
    }
    #[tokio::test]
    #[serial]
    async fn token_price() {
        init();
        let client = GeckoClient::default();
        let res = client
            .simple_token_price(
                "ethereum",
                &["usd", "eur"],
                &[
                    "0x1f9840a85d5af5bf1d1762f925bdaddc4201f984",
                    "0xf629cbd94d3791c9250152bd8dfbdf380e2a3b9c",
                ],
                true,
                true,
                true,
                true,
                "full",
            )
            .await;
        info!("{:#?}", res);
    }
}