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
14#[cfg(test)]
16pub mod mock;
17
18pub use self::{in_memory::*, subnode::CursorSubNode};
19
20#[auto_impl::auto_impl(&)]
22pub trait TrieCursorFactory {
23 type AccountTrieCursor: TrieCursor;
25 type StorageTrieCursor: TrieCursor;
27
28 fn account_trie_cursor(&self) -> Result<Self::AccountTrieCursor, DatabaseError>;
30
31 fn storage_trie_cursor(
33 &self,
34 hashed_address: B256,
35 ) -> Result<Self::StorageTrieCursor, DatabaseError>;
36}
37
38#[auto_impl::auto_impl(&mut, Box)]
40pub trait TrieCursor: Send + Sync {
41 fn seek_exact(
43 &mut self,
44 key: Nibbles,
45 ) -> Result<Option<(Nibbles, BranchNodeCompact)>, DatabaseError>;
46
47 fn seek(&mut self, key: Nibbles)
49 -> Result<Option<(Nibbles, BranchNodeCompact)>, DatabaseError>;
50
51 fn next(&mut self) -> Result<Option<(Nibbles, BranchNodeCompact)>, DatabaseError>;
53
54 fn current(&mut self) -> Result<Option<Nibbles>, DatabaseError>;
56}