eth-etl-core 0.1.0

Core types and utilities for Ethereum ETL
Documentation
use serde::{Deserialize, Serialize};

/// ERC20/ERC721 token transfer parsed from event logs
#[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 {
    /// Get CSV headers for token transfer export
    pub fn csv_headers() -> &'static [&'static str] {
        &[
            "token_address",
            "from_address",
            "to_address",
            "value",
            "transaction_hash",
            "log_index",
            "block_number",
        ]
    }

    /// Convert to CSV row
    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(),
        ]
    }
}