use std::collections::HashSet;
use alloy::primitives::U256;
use hdp_primitives::processed_types::{
account::ProcessedAccount, header::ProcessedHeader, mmr::MMRMeta, receipt::ProcessedReceipt,
storage::ProcessedStorage, transaction::ProcessedTransaction,
};
use hdp_provider::evm::provider::EvmProvider;
use thiserror::Error;
pub mod block_sampled;
pub mod transactions;
pub trait Fetchable {
fn fetch(
&self,
provider: EvmProvider,
) -> impl std::future::Future<Output = Result<FetchedDatalake, FetchError>> + Send;
}
#[derive(Error, Debug)]
pub enum FetchError {
#[error("provider error: {0}")]
ProviderError(#[from] hdp_provider::evm::provider::ProviderError),
}
pub struct FetchedDatalake {
pub values: Vec<U256>,
pub headers: HashSet<ProcessedHeader>,
pub accounts: HashSet<ProcessedAccount>,
pub storages: HashSet<ProcessedStorage>,
pub transactions: HashSet<ProcessedTransaction>,
pub transaction_receipts: HashSet<ProcessedReceipt>,
pub mmr_metas: HashSet<MMRMeta>,
}