use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AnalyticsDataPoint {
pub timestamp: Option<String>,
pub total_buyers: Option<i64>,
pub total_sellers: Option<i64>,
pub net_buyers: Option<i64>,
pub buy_volume_usd: Option<f64>,
pub sell_volume_usd: Option<f64>,
pub total_volume_usd: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AnalyticsTimeseries {
pub token_address: Option<String>,
pub chain: Option<String>,
pub data: Vec<AnalyticsDataPoint>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BatchAnalyticsRequest {
pub tokens: Vec<TokenAnalyticsInput>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TokenAnalyticsInput {
pub token_address: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub chain: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BatchAnalyticsResult {
pub token_address: Option<String>,
pub chain: Option<String>,
pub total_buyers: Option<i64>,
pub total_sellers: Option<i64>,
pub net_buyers: Option<i64>,
pub buy_volume_usd: Option<f64>,
pub sell_volume_usd: Option<f64>,
pub experienced_buyers: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AnalyticsTimeseriesRequest {
pub tokens: Vec<TokenAnalyticsInput>,
#[serde(skip_serializing_if = "Option::is_none")]
pub timeframe: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub from_date: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub to_date: Option<String>,
}