data3 0.2.0

SDK for accessing ethereum data hosted by indexers.
Documentation
use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize, Deserialize)]
pub struct ApiResponse<R> {
    pub result: Vec<R>,
    pub meta: Meta, // Assuming `meta` is always an empty object
}

#[derive(Debug, Serialize, Deserialize)]
pub struct Protocols {
    pub protocol_name: String,
    pub result: Vec<ChainValue>,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct ChainValue {
    pub chain_id: Option<u64>, // Nullable in JSON
    pub value_usd: f64,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct Meta {} // Empty struct since the `meta` object is empty

#[derive(Debug, Serialize, Deserialize)]
pub struct Candle {
    pub timestamp: u64,
    pub open: f64,
    pub low: f64,
    pub avg: f64,
    pub high: f64,
    pub close: f64,
}

pub enum Granularity {
    Month,
    Week,
    Day,
    Hour4,
    Hour,
    Min15,
    Min5,
}

impl From<Granularity> for String {
    fn from(granularity: Granularity) -> Self {
        match granularity {
            Granularity::Month => "month",
            Granularity::Week => "week",
            Granularity::Day => "day",
            Granularity::Hour4 => "4hour",
            Granularity::Hour => "hour",
            Granularity::Min15 => "15min",
            Granularity::Min5 => "5min",
        }
        .to_string()
    }
}