reth_trie/trie_cursor/
mod.rs1use crate::{BranchNodeCompact, Nibbles};
2use alloy_primitives::B256;
3use reth_storage_errors::db::DatabaseError;
4
5mod in_memory;
7
8mod subnode;
10
11pub mod noop;
13
14pub use self::{in_memory::*, subnode::CursorSubNode};
15
16pub trait TrieCursorFactory {
18 type AccountTrieCursor: TrieCursor;
20 type StorageTrieCursor: TrieCursor;
22
23 fn account_trie_cursor(&self) -> Result<Self::AccountTrieCursor, DatabaseError>;
25
26 fn storage_trie_cursor(
28 &self,
29 hashed_address: B256,
30 ) -> Result<Self::StorageTrieCursor, DatabaseError>;
31}
32
33#[auto_impl::auto_impl(&mut, Box)]
35pub trait TrieCursor: Send + Sync {
36 fn seek_exact(
38 &mut self,
39 key: Nibbles,
40 ) -> Result<Option<(Nibbles, BranchNodeCompact)>, DatabaseError>;
41
42 fn seek(&mut self, key: Nibbles)
44 -> Result<Option<(Nibbles, BranchNodeCompact)>, DatabaseError>;
45
46 fn next(&mut self) -> Result<Option<(Nibbles, BranchNodeCompact)>, DatabaseError>;
48
49 fn current(&mut self) -> Result<Option<Nibbles>, DatabaseError>;
51}