use serde::Deserialize;
use super::trade::Trade;
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CreatorInfo {
pub address: String,
#[serde(default)]
pub username: Option<String>,
#[serde(default)]
pub avatar: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Token {
pub id: i64,
pub token_address: String,
pub token_name: String,
pub token_symbol: String,
#[serde(default)]
pub token_description: Option<String>,
#[serde(default)]
pub image_style: Option<String>,
#[serde(default)]
pub token_image: Option<String>,
#[serde(default)]
pub token_banner: Option<String>,
pub creator_address: String,
pub user: CreatorInfo,
pub network: String,
pub marketcap: String,
pub price: String,
pub eth_price: String,
pub volume: String,
pub score: String,
pub virtual_eth_amount: String,
pub virtual_token_amount: String,
#[serde(default)]
pub pair_address: Option<String>,
pub pool_type: i64,
pub category: String,
pub replies: i64,
#[serde(default)]
pub web_link: Option<String>,
#[serde(default)]
pub telegram_link: Option<String>,
#[serde(default)]
pub twitter_link: Option<String>,
#[serde(default)]
pub launched_at: Option<String>,
pub created_at: String,
pub updated_at: String,
pub creation_time: String,
#[serde(default)]
pub liquidity: Option<String>,
#[serde(default)]
pub progress: Option<f64>,
#[serde(default)]
pub price_change: Option<f64>,
#[serde(default)]
pub price_15m: Option<f64>,
#[serde(default)]
pub price_change_15m: Option<f64>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Holder {
pub id: i64,
pub token_address: String,
pub holder_address: String,
pub token_amount: String,
pub token_name: String,
pub token_symbol: String,
#[serde(default)]
pub token_image: Option<String>,
pub marketcap: String,
pub network: String,
pub creator_address: String,
pub user: CreatorInfo,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TokenDetail {
pub token_details: Token,
pub trades: Vec<Trade>,
pub trades_count: i64,
pub holders_details: Vec<Holder>,
#[serde(default)]
pub fifteen_min_price: Option<String>,
#[serde(default)]
pub one_day_liquidity: Option<String>,
#[serde(default)]
pub curve_holding: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DiscoverToken {
pub token_address: String,
pub name: String,
pub symbol: String,
#[serde(default)]
pub image: Option<String>,
pub network: String,
#[serde(default)]
pub creator_address: Option<String>,
pub marketcap: f64,
pub price_usd: f64,
pub created_at: i64,
pub launched: bool,
pub volume24h: f64,
pub buys24h: i64,
pub sells24h: i64,
pub holders: i64,
pub price_change24h: f64,
pub graduation_pct: f64,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct KingResponse {
pub king: Option<Token>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TokenPage {
pub token_list: Vec<Token>,
pub token_count: i64,
}