Skip to main content

reth_trie_db/
lib.rs

1//! An integration of `reth-trie` with `reth-db`.
2
3#![cfg_attr(not(test), warn(unused_crate_dependencies))]
4
5mod changesets;
6pub use changesets::*;
7mod hashed_cursor;
8mod prefix_set;
9mod proof;
10mod state;
11mod storage;
12mod trie_cursor;
13
14pub use hashed_cursor::{
15    DatabaseHashedAccountCursor, DatabaseHashedCursorFactory, DatabaseHashedStorageCursor,
16};
17pub use prefix_set::load_prefix_sets_with_provider;
18pub use proof::{DatabaseProof, DatabaseStorageProof};
19pub use reth_db_api::tables::{PackedAccountsTrie, PackedStoragesTrie};
20pub use state::{from_reverts_auto, DatabaseHashedPostState, DatabaseStateRoot};
21pub use storage::{hashed_storage_from_reverts_with_provider, DatabaseStorageRoot};
22pub use trie_cursor::{
23    DatabaseAccountTrieCursor, DatabaseStorageTrieCursor, DatabaseTrieCursorFactory,
24    LegacyKeyAdapter, PackedKeyAdapter, StorageTrieEntryLike, TrieKeyAdapter, TrieTableAdapter,
25};
26
27/// Dispatches a trie operation using the correct [`TrieKeyAdapter`] based on storage settings.
28///
29/// The first argument must implement
30/// [`StorageSettingsCache`](reth_storage_api::StorageSettingsCache). Inside the closure body, `$A`
31/// is a type alias for either [`PackedKeyAdapter`] or [`LegacyKeyAdapter`].
32///
33/// # Example
34///
35/// ```ignore
36/// reth_trie_db::with_adapter!(provider, |A| {
37///     let factory = DatabaseTrieCursorFactory::<_, A>::new(tx);
38///     // ...
39/// })
40/// ```
41#[macro_export]
42macro_rules! with_adapter {
43    ($settings_provider:expr, |$A:ident| $body:expr) => {
44        if $settings_provider.cached_storage_settings().is_v2() {
45            {
46                type $A = $crate::PackedKeyAdapter;
47                $body
48            }
49        } else {
50            {
51                type $A = $crate::LegacyKeyAdapter;
52                $body
53            }
54        }
55    };
56}