use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct EthTokenTransfer {
#[serde(rename = "type", default = "default_token_transfer_type")]
pub item_type: String,
pub token_address: String,
pub from_address: String,
pub to_address: String,
pub value: String,
pub transaction_hash: String,
pub log_index: u64,
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_transfer_type() -> String {
"token_transfer".to_string()
}
impl EthTokenTransfer {
pub fn csv_headers() -> &'static [&'static str] {
&[
"token_address",
"from_address",
"to_address",
"value",
"transaction_hash",
"log_index",
"block_number",
]
}
pub fn to_csv_row(&self) -> Vec<String> {
vec![
self.token_address.clone(),
self.from_address.clone(),
self.to_address.clone(),
self.value.clone(),
self.transaction_hash.clone(),
self.log_index.to_string(),
self.block_number.to_string(),
]
}
}