eth-etl-core 0.1.0

Core types and utilities for Ethereum ETL
Documentation
mod block;
mod contract;
mod log;
mod receipt;
mod token;
mod token_transfer;
mod trace;
mod transaction;

pub use block::*;
pub use contract::*;
pub use log::*;
pub use receipt::*;
pub use token::*;
pub use token_transfer::*;
pub use trace::*;
pub use transaction::*;

use serde::{Deserialize, Serialize};

/// Entity types that can be exported
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum EntityType {
    Block,
    Transaction,
    Receipt,
    Log,
    TokenTransfer,
    Trace,
    Contract,
    Token,
}

impl EntityType {
    pub fn as_str(&self) -> &'static str {
        match self {
            EntityType::Block => "block",
            EntityType::Transaction => "transaction",
            EntityType::Receipt => "receipt",
            EntityType::Log => "log",
            EntityType::TokenTransfer => "token_transfer",
            EntityType::Trace => "trace",
            EntityType::Contract => "contract",
            EntityType::Token => "token",
        }
    }

    pub fn from_str(s: &str) -> Option<Self> {
        match s {
            "block" => Some(EntityType::Block),
            "transaction" => Some(EntityType::Transaction),
            "receipt" => Some(EntityType::Receipt),
            "log" => Some(EntityType::Log),
            "token_transfer" => Some(EntityType::TokenTransfer),
            "trace" => Some(EntityType::Trace),
            "contract" => Some(EntityType::Contract),
            "token" => Some(EntityType::Token),
            _ => None,
        }
    }
}

impl std::fmt::Display for EntityType {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "{}", self.as_str())
    }
}