cmc 0.4.4

Rust Library for the CoinMarketCap API
Documentation
use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::fmt::{Display, Formatter};

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CmcKeyInfo {
    pub status: Status,
    pub data: KeyInfo,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Status {
    pub timestamp: String,
    pub error_code: i64,
    pub error_message: Value,
    pub elapsed: i64,
    pub credit_count: i64,
    pub notice: Value,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct KeyInfo {
    pub plan: Plan,
    pub usage: Usage,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Plan {
    pub credit_limit_monthly: i64,
    pub credit_limit_monthly_reset: String,
    pub credit_limit_monthly_reset_timestamp: String,
    pub rate_limit_minute: i64,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Usage {
    pub current_minute: CurrentMinute,
    pub current_day: CurrentDay,
    pub current_month: CurrentMonth,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CurrentMinute {
    pub requests_made: i64,
    pub requests_left: i64,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CurrentDay {
    pub credits_used: i64,
    pub credits_left: Option<i64>,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct CurrentMonth {
    pub credits_used: i64,
    pub credits_left: i64,
}

impl Display for KeyInfo {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        write!(
            f,
            "Plan credit limits:\nMonthly: {}\nMonthly reset: {}\n\
            Rate limit minute: {}\n----------------------\nCredits left this month: {}",
            self.plan.credit_limit_monthly,
            self.plan.credit_limit_monthly_reset,
            self.plan.rate_limit_minute,
            self.usage.current_month.credits_left
        )
    }
}