use moloch_core::{AuditEvent, Block, BlockHash, BlockHeader, EventId, Hash, Result};
pub trait EventStore {
fn get_event(&self, id: &EventId) -> Result<Option<AuditEvent>>;
fn put_event(&self, event: &AuditEvent) -> Result<()>;
fn event_exists(&self, id: &EventId) -> Result<bool>;
fn get_events_by_block(&self, height: u64) -> Result<Vec<AuditEvent>>;
}
pub trait BlockStore {
fn get_block(&self, height: u64) -> Result<Option<Block>>;
fn get_block_by_hash(&self, hash: &BlockHash) -> Result<Option<Block>>;
fn get_header(&self, height: u64) -> Result<Option<BlockHeader>>;
fn put_block(&self, block: &Block) -> Result<()>;
fn latest_height(&self) -> Result<Option<u64>>;
fn latest_block(&self) -> Result<Option<Block>>;
}
pub trait ChainStore: EventStore + BlockStore {
fn get_mmr_node(&self, pos: u64) -> Result<Option<Hash>>;
fn put_mmr_node(&self, pos: u64, hash: Hash) -> Result<()>;
fn mmr_size(&self) -> Result<u64>;
fn mmr_leaf_count(&self) -> Result<u64>;
fn set_mmr_meta(&self, size: u64, leaf_count: u64) -> Result<()>;
fn flush(&self) -> Result<()>;
}