use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PairPrice {
pub token0_address: Option<String>,
pub token1_address: Option<String>,
pub token0_to_token1_price: Option<String>,
pub token1_to_token0_price: Option<String>,
pub pair_address: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PairReserves {
pub reserve0: Option<String>,
pub reserve1: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PairAddress {
pub token0_address: Option<String>,
pub token1_address: Option<String>,
pub pair_address: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DefiSummary {
pub total_usd_value: Option<f64>,
pub active_protocols: Option<i32>,
pub protocols: Option<Vec<ProtocolSummary>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProtocolSummary {
pub protocol_id: Option<String>,
pub protocol_name: Option<String>,
pub protocol_logo: Option<String>,
pub total_usd_value: Option<f64>,
pub position_count: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DefiPosition {
pub protocol_id: Option<String>,
pub protocol_name: Option<String>,
pub protocol_logo: Option<String>,
pub protocol_url: Option<String>,
pub label: Option<String>,
pub position_type: Option<String>,
pub usd_value: Option<f64>,
pub chain: Option<String>,
pub tokens: Option<Vec<DefiToken>>,
pub position: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DefiToken {
pub address: Option<String>,
pub name: Option<String>,
pub symbol: Option<String>,
pub logo: Option<String>,
pub decimals: Option<u8>,
pub balance: Option<String>,
pub balance_formatted: Option<String>,
pub usd_value: Option<f64>,
pub usd_price: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DefiPositionsResponse {
pub cursor: Option<String>,
pub page_size: Option<i32>,
pub result: Vec<DefiPosition>,
}