use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct PriceResponse {
pub coins: HashMap<String, CoinData>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct CoinData {
pub price: f64,
#[serde(default)]
pub symbol: String,
#[serde(default)]
pub timestamp: u64,
#[serde(default)]
pub confidence: f64,
#[serde(default)]
pub decimals: Option<u8>,
}
#[derive(Debug)]
pub enum Chain {
Ethereum,
Solana,
Polygon,
Avalanche,
BinanceSmartChain,
Arbitrum,
Optimism,
Fantom,
}
impl Chain {
pub fn as_str(&self) -> &'static str {
match self {
Chain::Ethereum => "ethereum",
Chain::Solana => "solana",
Chain::Polygon => "polygon",
Chain::Avalanche => "avax",
Chain::BinanceSmartChain => "bsc",
Chain::Arbitrum => "arbitrum",
Chain::Optimism => "optimism",
Chain::Fantom => "fantom",
}
}
}
#[derive(Debug)]
pub struct Token {
pub chain: Chain,
pub address: String,
}
impl Token {
pub fn new(chain: Chain, address: String) -> Self {
Self { chain, address }
}
pub fn format(&self) -> String {
format!("{}:{}", self.chain.as_str(), self.address)
}
pub fn native(chain: Chain) -> Self {
Self {
chain,
address: "0x0000000000000000000000000000000000000000".to_string(),
}
}
}