use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DiscoveredToken {
pub token_address: Option<String>,
pub token_name: Option<String>,
pub token_symbol: Option<String>,
pub token_logo: Option<String>,
pub token_decimals: Option<u8>,
pub chain: Option<String>,
pub price_usd: Option<f64>,
pub price_change_24h: Option<f64>,
pub volume_24h_usd: Option<f64>,
pub market_cap_usd: Option<f64>,
pub liquidity_usd: Option<f64>,
pub fully_diluted_valuation: Option<f64>,
pub total_supply: Option<String>,
pub max_supply: Option<String>,
pub holders_count: Option<i64>,
pub created_at: Option<String>,
pub security_score: Option<i32>,
pub on_chain_strength_index: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DiscoveryFilter {
pub min_market_cap: Option<f64>,
pub max_market_cap: Option<f64>,
pub min_liquidity: Option<f64>,
pub max_liquidity: Option<f64>,
pub min_volume_24h: Option<f64>,
pub max_volume_24h: Option<f64>,
pub min_holders: Option<i64>,
pub min_security_score: Option<i32>,
pub chains: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TokenAnalytics {
pub token_address: 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)]
#[serde(rename_all = "camelCase")]
pub struct TokenScore {
pub token_address: Option<String>,
pub security_score: Option<i32>,
pub on_chain_strength_index: Option<f64>,
pub is_verified: Option<bool>,
pub is_possible_spam: Option<bool>,
pub risk_flags: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DiscoveryResponse {
pub cursor: Option<String>,
pub page_size: Option<i32>,
pub result: Vec<DiscoveredToken>,
}