data3 0.2.0

SDK for accessing ethereum data hosted by indexers.
Documentation
use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize, Deserialize)]
pub struct AccountInfo {
    pub block_number_balance_updated_at: Option<u64>,
    pub coin_balance: Option<String>,
    pub creation_transaction_hash: Option<String>,
    pub creator_address_hash: Option<String>,
    pub ens_domain_name: Option<String>,
    pub exchange_rate: Option<String>,
    pub has_beacon_chain_withdrawals: Option<bool>,
    pub has_logs: Option<bool>,
    pub has_token_transfers: Option<bool>,
    pub has_tokens: Option<bool>,
    pub has_validated_blocks: Option<bool>,
    pub hash: Option<String>,
    pub implementations: Option<serde_json::Value>,
    pub is_contract: Option<bool>,
    pub is_scam: Option<bool>,
    pub is_verified: Option<bool>,
    pub metadata: Option<String>,
    pub name: Option<String>,
    pub private_tags: Option<Vec<String>>,
    pub proxy_type: Option<String>,
    pub public_tags: Option<Vec<String>>,
    pub token: Option<String>,
    pub watchlist_address_id: Option<String>,
    pub watchlist_names: Option<Vec<String>>,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct TransactionMetadataTag {
    pub meta: serde_json::Value,
    pub name: String,
    pub ordinal: u64,
    pub slug: String,
    #[serde(rename = "tagType")]
    pub tag_type: String,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct TransactionMetadata {
    pub tags: Vec<TransactionMetadataTag>,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct AddressInfo {
    pub ens_domain_name: Option<String>,
    pub hash: String,
    pub implementations: Option<serde_json::value::Value>,
    pub is_contract: bool,
    pub is_scam: bool,
    pub is_verified: bool,
    pub metadata: Option<TransactionMetadata>,
    pub name: Option<String>,
    pub private_tags: Vec<String>,
    pub proxy_type: Option<String>,
    pub public_tags: Vec<String>,
    pub watchlist_names: Vec<String>,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct Fee {
    #[serde(rename = "type")]
    pub fee_type: String,
    pub value: String,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct Transaction {
    pub priority_fee: Option<String>,
    pub raw_input: String,
    pub result: String,
    pub hash: String,
    pub max_fee_per_gas: Option<String>,
    pub revert_reason: Option<serde_json::value::Value>,
    pub confirmation_duration: [f64; 2],
    pub transaction_burnt_fee: Option<String>,
    #[serde(rename = "type")]
    pub tx_type: u8,
    pub token_transfers_overflow: Option<String>,
    pub confirmations: u64,
    pub position: u64,
    pub max_priority_fee_per_gas: Option<String>,
    pub transaction_tag: Option<String>,
    pub created_contract: Option<String>,
    pub value: String,
    pub from: AddressInfo,
    pub gas_used: String,
    pub status: String,
    pub to: AddressInfo,
    pub authorization_list: Vec<String>,
    pub method: Option<String>,
    pub fee: Fee,
    pub actions: Vec<String>,
    pub gas_limit: String,
    pub gas_price: String,
    pub decoded_input: Option<serde_json::value::Value>,
    pub token_transfers: Option<String>,
    pub base_fee_per_gas: String,
    pub timestamp: String,
    pub nonce: u64,
    pub historic_exchange_rate: Option<String>,
    pub transaction_types: Vec<String>,
    pub exchange_rate: String,
    pub block_number: u64,
    pub has_error_in_internal_transactions: Option<bool>,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct TokenInfo {
    pub address: String,
    pub address_hash: String,
    pub circulating_market_cap: Option<String>,
    pub decimals: Option<String>,
    pub exchange_rate: Option<String>,
    pub holders: Option<String>,
    pub holders_count: String,
    pub icon_url: Option<String>,
    pub name: String,
    pub symbol: Option<String>,
    pub total_supply: String,
    #[serde(rename = "type")]
    pub token_type: String,
    pub volume_24h: Option<String>,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct TokenInstanceMetadata {
    pub description: String,
    pub image: String,
    pub name: String,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct TokenInstance {
    pub animation_url: Option<String>,
    pub external_app_url: Option<String>,
    pub id: String,
    pub image_url: String,
    pub is_unique: Option<bool>,
    pub media_type: Option<String>,
    pub media_url: String,
    pub metadata: TokenInstanceMetadata,
    pub owner: Option<String>,
    pub thumbnails: Option<String>,
    pub token: TokenInfo,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct Total {
    pub decimals: Option<String>,
    pub value: String,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct TokenTransferRecord {
    pub block_hash: String,
    pub block_number: u64,
    pub from: AddressInfo,
    pub log_index: u64,
    pub method: String,
    pub timestamp: String,
    pub to: AddressInfo,
    pub token: TokenInfo,
    pub total: Total,
    pub transaction_hash: String,
    #[serde(rename = "type")]
    pub transfer_type: String,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct Token {
    pub address: String,
    pub address_hash: String,
    pub circulating_market_cap: Option<String>,
    pub decimals: Option<String>,
    pub exchange_rate: Option<String>,
    pub holders: Option<String>,
    pub holders_count: Option<String>,
    pub icon_url: Option<String>,
    pub name: Option<String>,
    pub symbol: Option<String>,
    pub total_supply: Option<String>,
    #[serde(rename = "type")]
    pub token_type: String,
    pub volume_24h: Option<String>,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct TokenBalance {
    pub token: Token,
    pub token_id: Option<String>,
    pub token_instance: Option<serde_json::Value>,
    pub value: Option<String>,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct NextPageParams {
    pub block_number: u64,
    pub index: u64,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct BlockScoutResponse<T> {
    pub next_page_params: Option<NextPageParams>,
    pub items: Vec<T>,
}