reth_trie/trie_cursor/
mod.rs1use crate::{BranchNodeCompact, Nibbles};
2use alloy_primitives::B256;
3use reth_storage_errors::db::DatabaseError;
4
5mod in_memory;
7
8pub mod subnode;
10
11pub mod noop;
13
14pub mod depth_first;
16
17#[cfg(test)]
19pub mod mock;
20
21pub use self::{depth_first::DepthFirstTrieIterator, in_memory::*, subnode::CursorSubNode};
22
23#[auto_impl::auto_impl(&)]
25pub trait TrieCursorFactory {
26 type AccountTrieCursor: TrieCursor;
28 type StorageTrieCursor: TrieCursor;
30
31 fn account_trie_cursor(&self) -> Result<Self::AccountTrieCursor, DatabaseError>;
33
34 fn storage_trie_cursor(
36 &self,
37 hashed_address: B256,
38 ) -> Result<Self::StorageTrieCursor, DatabaseError>;
39}
40
41#[auto_impl::auto_impl(&mut, Box)]
44pub trait TrieCursor: Send + Sync {
45 fn seek_exact(
47 &mut self,
48 key: Nibbles,
49 ) -> Result<Option<(Nibbles, BranchNodeCompact)>, DatabaseError>;
50
51 fn seek(&mut self, key: Nibbles)
53 -> Result<Option<(Nibbles, BranchNodeCompact)>, DatabaseError>;
54
55 fn next(&mut self) -> Result<Option<(Nibbles, BranchNodeCompact)>, DatabaseError>;
57
58 fn current(&mut self) -> Result<Option<Nibbles>, DatabaseError>;
60}