use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct EthToken {
#[serde(rename = "type", default = "default_token_type")]
pub item_type: String,
pub address: String,
pub symbol: Option<String>,
pub name: Option<String>,
pub decimals: Option<u8>,
pub total_supply: Option<String>,
pub block_number: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub block_hash: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub block_timestamp: Option<u64>,
}
fn default_token_type() -> String {
"token".to_string()
}
impl EthToken {
pub fn csv_headers() -> &'static [&'static str] {
&[
"address",
"symbol",
"name",
"decimals",
"total_supply",
"block_number",
]
}
pub fn to_csv_row(&self) -> Vec<String> {
vec![
self.address.clone(),
self.symbol.clone().unwrap_or_default(),
self.name.clone().unwrap_or_default(),
self.decimals.map(|v| v.to_string()).unwrap_or_default(),
self.total_supply.clone().unwrap_or_default(),
self.block_number.to_string(),
]
}
}