From 92dbe08ae7c20c9b1efd4178c185d1f2e4d9dbdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renault?= Date: Sun, 17 Nov 2024 19:47:11 +0100 Subject: [PATCH] Fix all errors and most warnings --- heed/Cargo.toml | 67 ++--- heed/src/cookbook.rs | 32 +-- heed/src/databases/database.rs | 315 ++++++++++------------ heed/src/databases/encrypted_database.rs | 330 +++++++++++------------ heed/src/envs/encrypted_env.rs | 89 ++---- heed/src/envs/env.rs | 11 +- heed/src/envs/env_open_options.rs | 11 +- heed/src/envs/mod.rs | 2 +- heed/src/iterator/iter.rs | 12 +- heed/src/lib.rs | 10 +- heed/src/mdb/lmdb_flags.rs | 36 +-- 11 files changed, 423 insertions(+), 492 deletions(-) diff --git a/heed/Cargo.toml b/heed/Cargo.toml index 35374010..1176d5e0 100644 --- a/heed/Cargo.toml +++ b/heed/Cargo.toml @@ -1,28 +1,34 @@ [package] -name = "heed" -version = "0.20.5" +name = "heed3" +version = "0.20.5-beta.1" authors = ["Kerollmops "] -description = "A fully typed LMDB (mdb.master) wrapper with minimum overhead" +description = "A fully typed LMDB (mdb.master3) wrapper with minimum overhead with support for encryption" license = "MIT" repository = "https://github.com/Kerollmops/heed" -keywords = ["lmdb", "database", "storage", "typed"] +keywords = ["lmdb", "database", "storage", "typed", "encryption"] categories = ["database", "data-structures"] readme = "../README.md" edition = "2021" [dependencies] +# TODO update dependencies +aead = { version = "0.5.1", default-features = false } bitflags = { version = "2.6.0", features = ["serde"] } byteorder = { version = "1.5.0", default-features = false } +generic-array = { version = "0.14.6", features = ["serde"] } heed-traits = { version = "0.20.0", path = "../heed-traits" } heed-types = { version = "0.20.1", default-features = false, path = "../heed-types" } libc = "0.2.155" -lmdb-master-sys = { version = "0.2.4", path = "../lmdb-master-sys" } +lmdb-master3-sys = { version = "0.2.4", path = "../lmdb-master3-sys" } once_cell = "1.19.0" page_size = "0.6.0" serde = { version = "1.0.203", features = ["derive"], optional = true } [dev-dependencies] +# TODO update dependencies +argon2 = { version = "0.4.1", features = ["std"] } serde = { version = "1.0.203", features = ["derive"] } +chacha20poly1305 = "0.10.1" tempfile = "3.10.1" [target.'cfg(windows)'.dependencies] @@ -67,7 +73,7 @@ unbounded_depth = ["heed-types/unbounded_depth"] # There are tradeoffs for both POSIX and SysV semaphores; which you # should look into before enabling this feature. Also, see here: # -posix-sem = ["lmdb-master-sys/posix-sem"] +posix-sem = ["lmdb-master3-sys/posix-sem"] # These features configure the MDB_IDL_LOGN macro, which determines # the size of the free and dirty page lists (and thus the amount of memory @@ -79,15 +85,15 @@ posix-sem = ["lmdb-master-sys/posix-sem"] # # For more information on the motivation for these features (and their effect), # see https://github.com/mozilla/lmdb/pull/2. -mdb_idl_logn_8 = ["lmdb-master-sys/mdb_idl_logn_8"] -mdb_idl_logn_9 = ["lmdb-master-sys/mdb_idl_logn_9"] -mdb_idl_logn_10 = ["lmdb-master-sys/mdb_idl_logn_10"] -mdb_idl_logn_11 = ["lmdb-master-sys/mdb_idl_logn_11"] -mdb_idl_logn_12 = ["lmdb-master-sys/mdb_idl_logn_12"] -mdb_idl_logn_13 = ["lmdb-master-sys/mdb_idl_logn_13"] -mdb_idl_logn_14 = ["lmdb-master-sys/mdb_idl_logn_14"] -mdb_idl_logn_15 = ["lmdb-master-sys/mdb_idl_logn_15"] -mdb_idl_logn_16 = ["lmdb-master-sys/mdb_idl_logn_16"] +mdb_idl_logn_8 = ["lmdb-master3-sys/mdb_idl_logn_8"] +mdb_idl_logn_9 = ["lmdb-master3-sys/mdb_idl_logn_9"] +mdb_idl_logn_10 = ["lmdb-master3-sys/mdb_idl_logn_10"] +mdb_idl_logn_11 = ["lmdb-master3-sys/mdb_idl_logn_11"] +mdb_idl_logn_12 = ["lmdb-master3-sys/mdb_idl_logn_12"] +mdb_idl_logn_13 = ["lmdb-master3-sys/mdb_idl_logn_13"] +mdb_idl_logn_14 = ["lmdb-master3-sys/mdb_idl_logn_14"] +mdb_idl_logn_15 = ["lmdb-master3-sys/mdb_idl_logn_15"] +mdb_idl_logn_16 = ["lmdb-master3-sys/mdb_idl_logn_16"] # Setting this enables you to use keys longer than 511 bytes. The exact limit # is computed by LMDB at compile time. You can find the exact value by calling @@ -107,35 +113,10 @@ mdb_idl_logn_16 = ["lmdb-master-sys/mdb_idl_logn_16"] # stored key must fit within the smallest limit of all architectures used. For # example, if you are moving databases between Apple M1 and Apple Intel # computers then you need to keep your keys within the smaller 1982 byte limit. -longer-keys = ["lmdb-master-sys/longer-keys"] +longer-keys = ["lmdb-master3-sys/longer-keys"] # Examples are located outside the standard heed/examples directory to prevent # conflicts between heed3 and heed examples when working on both crates. [[example]] -name = "all-types" -path = "../examples/all-types.rs" - -[[example]] -name = "clear-database" -path = "../examples/clear-database.rs" - -[[example]] -name = "cursor-append" -path = "../examples/cursor-append.rs" - -[[example]] -name = "custom-comparator" -path = "../examples/custom-comparator.rs" - -[[example]] -name = "multi-env" -path = "../examples/multi-env.rs" - -[[example]] -name = "nested" -path = "../examples/nested.rs" - -[[example]] -name = "rmp-serde" -path = "../examples/rmp-serde.rs" -required-features = ["serde-rmp"] +name = "heed3-encryption" +path = "../examples/heed3-encryption.rs" diff --git a/heed/src/cookbook.rs b/heed/src/cookbook.rs index 0be8a53a..4f5aaca1 100644 --- a/heed/src/cookbook.rs +++ b/heed/src/cookbook.rs @@ -18,8 +18,8 @@ //! use std::fs; //! use std::path::Path; //! -//! use heed::types::*; -//! use heed::{Database, EnvOpenOptions}; +//! use heed3::types::*; +//! use heed3::{Database, EnvOpenOptions}; //! //! pub type StringMap = HashMap; //! @@ -57,9 +57,9 @@ //! } //! //! fn fill_with_data( -//! wtxn: &mut heed::RwTxn, +//! wtxn: &mut heed3::RwTxn, //! db: Database>, -//! ) -> heed::Result<()> { +//! ) -> heed3::Result<()> { //! // This represents a very big value that we only want to decode when necessary. //! let mut big_string_map = HashMap::new(); //! big_string_map.insert("key1".into(), "I am a very long string".into()); @@ -88,8 +88,8 @@ //! use std::fs; //! use std::path::Path; //! -//! use heed::types::*; -//! use heed::{Database, EnvOpenOptions}; +//! use heed3::types::*; +//! use heed3::{Database, EnvOpenOptions}; //! //! fn main() -> Result<(), Box> { //! let env_path = Path::new("target").join("heed.mdb"); @@ -151,8 +151,8 @@ //! use std::fs; //! use std::path::Path; //! -//! use heed::types::*; -//! use heed::{BoxedError, BytesDecode, BytesEncode, Database, EnvOpenOptions}; +//! use heed3::types::*; +//! use heed3::{BoxedError, BytesDecode, BytesEncode, Database, EnvOpenOptions}; //! //! #[derive(Debug, PartialEq, Eq)] //! pub enum Level { @@ -294,8 +294,8 @@ //! use std::fs; //! use std::path::Path; //! -//! use heed::types::*; -//! use heed::{Database, EnvOpenOptions}; +//! use heed3::types::*; +//! use heed3::{Database, EnvOpenOptions}; //! //! fn main() -> Result<(), Box> { //! let path = Path::new("target").join("small-space.mdb"); @@ -314,7 +314,7 @@ //! // Ho! Crap! We don't have enough space in this environment... //! assert!(matches!( //! fill_with_data(&mut wtxn, db), -//! Err(heed::Error::Mdb(heed::MdbError::MapFull)) +//! Err(heed3::Error::Mdb(heed3::MdbError::MapFull)) //! )); //! //! drop(wtxn); @@ -338,7 +338,7 @@ //! Ok(()) //! } //! -//! fn fill_with_data(wtxn: &mut heed::RwTxn, db: Database) -> heed::Result<()> { +//! fn fill_with_data(wtxn: &mut heed3::RwTxn, db: Database) -> heed3::Result<()> { //! for i in 0..1000 { //! let key = i.to_string(); //! db.put(wtxn, &key, "I am a very long string")?; @@ -373,8 +373,8 @@ //! use std::fs; //! use std::path::Path; //! -//! use heed::types::*; -//! use heed::{Database, EnvOpenOptions, RoTxn}; +//! use heed3::types::*; +//! use heed3::{Database, EnvOpenOptions, RoTxn}; //! //! fn main() -> Result<(), Box> { //! let path = Path::new("target").join("heed.mdb"); @@ -415,7 +415,7 @@ //! Ok(()) //! } //! -//! fn fill_with_data(wtxn: &mut heed::RwTxn, db: Database) -> heed::Result<()> { +//! fn fill_with_data(wtxn: &mut heed3::RwTxn, db: Database) -> heed3::Result<()> { //! for i in 0..100 { //! let key = i.to_string(); //! db.put(wtxn, &key, "I am a very long string")?; @@ -428,7 +428,7 @@ //! } //! //! impl<'t> ImmutableMap<'t> { -//! fn from_db(rtxn: &'t RoTxn, db: Database) -> heed::Result { +//! fn from_db(rtxn: &'t RoTxn, db: Database) -> heed3::Result { //! let mut map = HashMap::new(); //! for result in db.iter(rtxn)? { //! let (k, v) = result?; diff --git a/heed/src/databases/database.rs b/heed/src/databases/database.rs index 69f4328a..df58b3ff 100644 --- a/heed/src/databases/database.rs +++ b/heed/src/databases/database.rs @@ -22,9 +22,9 @@ use crate::*; /// ``` /// # use std::fs; /// # use std::path::Path; -/// # use heed::EnvOpenOptions; -/// use heed::types::*; -/// use heed::byteorder::BigEndian; +/// # use heed3::EnvOpenOptions; +/// use heed3::types::*; +/// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -192,10 +192,10 @@ impl Copy for DatabaseOpenOptions<'_, '_, KC, DC, C> {} /// ``` /// # use std::fs; /// # use std::path::Path; -/// # use heed::EnvOpenOptions; -/// use heed::Database; -/// use heed::types::*; -/// use heed::byteorder::BigEndian; +/// # use heed3::EnvOpenOptions; +/// use heed3::Database; +/// use heed3::types::*; +/// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -240,10 +240,10 @@ impl Copy for DatabaseOpenOptions<'_, '_, KC, DC, C> {} /// ``` /// # use std::fs; /// # use std::path::Path; -/// # use heed::EnvOpenOptions; -/// use heed::Database; -/// use heed::types::*; -/// use heed::byteorder::BigEndian; +/// # use heed3::EnvOpenOptions; +/// use heed3::Database; +/// use heed3::types::*; +/// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -311,10 +311,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -341,7 +341,6 @@ impl Database { /// wtxn.commit()?; /// # Ok(()) } /// ``` - #[cfg_attr(master3, heed_master3_proc_macro::mut_read_txn(txn))] pub fn get<'a, 'txn>(&self, txn: &'txn RoTxn, key: &'a KC::EItem) -> Result> where KC: BytesEncode<'a>, @@ -382,9 +381,9 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::{DatabaseFlags, EnvOpenOptions}; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::{DatabaseFlags, EnvOpenOptions}; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -426,7 +425,6 @@ impl Database { /// wtxn.commit()?; /// # Ok(()) } /// ``` - #[cfg_attr(master3, heed_master3_proc_macro::mut_read_txn(txn))] pub fn get_duplicates<'a, 'txn>( &self, txn: &'txn RoTxn, @@ -456,10 +454,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -490,7 +488,6 @@ impl Database { /// wtxn.commit()?; /// # Ok(()) } /// ``` - #[cfg_attr(master3, heed_master3_proc_macro::mut_read_txn(txn))] pub fn get_lower_than<'a, 'txn>( &self, txn: &'txn RoTxn, @@ -526,10 +523,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -560,7 +557,6 @@ impl Database { /// wtxn.commit()?; /// # Ok(()) } /// ``` - #[cfg_attr(master3, heed_master3_proc_macro::mut_read_txn(txn))] pub fn get_lower_than_or_equal_to<'a, 'txn>( &self, txn: &'txn RoTxn, @@ -600,10 +596,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -634,7 +630,6 @@ impl Database { /// wtxn.commit()?; /// # Ok(()) } /// ``` - #[cfg_attr(master3, heed_master3_proc_macro::mut_read_txn(txn))] pub fn get_greater_than<'a, 'txn>( &self, txn: &'txn RoTxn, @@ -673,10 +668,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -707,7 +702,6 @@ impl Database { /// wtxn.commit()?; /// # Ok(()) } /// ``` - #[cfg_attr(master3, heed_master3_proc_macro::mut_read_txn(txn))] pub fn get_greater_than_or_equal_to<'a, 'txn>( &self, txn: &'txn RoTxn, @@ -740,10 +734,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -767,7 +761,6 @@ impl Database { /// wtxn.commit()?; /// # Ok(()) } /// ``` - #[cfg_attr(master3, heed_master3_proc_macro::mut_read_txn(txn))] pub fn first<'txn>(&self, txn: &'txn RoTxn) -> Result> where KC: BytesDecode<'txn>, @@ -795,10 +788,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -822,7 +815,6 @@ impl Database { /// wtxn.commit()?; /// # Ok(()) } /// ``` - #[cfg_attr(master3, heed_master3_proc_macro::mut_read_txn(txn))] pub fn last<'txn>(&self, txn: &'txn RoTxn) -> Result> where KC: BytesDecode<'txn>, @@ -846,10 +838,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -880,7 +872,6 @@ impl Database { /// wtxn.commit()?; /// # Ok(()) } /// ``` - #[cfg_attr(master3, heed_master3_proc_macro::mut_read_txn(txn))] pub fn len(&self, txn: &RoTxn) -> Result { self.stat(txn).map(|stat| stat.entries as u64) } @@ -890,10 +881,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -924,7 +915,6 @@ impl Database { /// wtxn.commit()?; /// # Ok(()) } /// ``` - #[cfg_attr(master3, heed_master3_proc_macro::mut_read_txn(txn))] pub fn is_empty(&self, txn: &RoTxn) -> Result { self.len(txn).map(|l| l == 0) } @@ -934,10 +924,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -967,7 +957,6 @@ impl Database { /// wtxn.commit()?; /// # Ok(()) } /// ``` - #[cfg_attr(master3, heed_master3_proc_macro::mut_read_txn(txn))] pub fn stat(&self, txn: &RoTxn) -> Result { assert_eq_env_db_txn!(self, txn); @@ -1000,10 +989,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1032,7 +1021,6 @@ impl Database { /// wtxn.commit()?; /// # Ok(()) } /// ``` - #[cfg_attr(master3, heed_master3_proc_macro::mut_read_txn(txn))] pub fn iter<'txn>(&self, txn: &'txn RoTxn) -> Result> { assert_eq_env_db_txn!(self, txn); RoCursor::new(txn, self.dbi).map(|cursor| RoIter::new(cursor)) @@ -1043,10 +1031,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1102,10 +1090,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1134,7 +1122,6 @@ impl Database { /// wtxn.commit()?; /// # Ok(()) } /// ``` - #[cfg_attr(master3, heed_master3_proc_macro::mut_read_txn(txn))] pub fn rev_iter<'txn>(&self, txn: &'txn RoTxn) -> Result> { assert_eq_env_db_txn!(self, txn); @@ -1147,10 +1134,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1208,10 +1195,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1241,7 +1228,6 @@ impl Database { /// wtxn.commit()?; /// # Ok(()) } /// ``` - #[cfg_attr(master3, heed_master3_proc_macro::mut_read_txn(txn))] pub fn range<'a, 'txn, R>( &self, txn: &'txn RoTxn, @@ -1288,10 +1274,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1383,10 +1369,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1416,7 +1402,6 @@ impl Database { /// wtxn.commit()?; /// # Ok(()) } /// ``` - #[cfg_attr(master3, heed_master3_proc_macro::mut_read_txn(txn))] pub fn rev_range<'a, 'txn, R>( &self, txn: &'txn RoTxn, @@ -1463,10 +1448,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1558,10 +1543,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1592,7 +1577,6 @@ impl Database { /// wtxn.commit()?; /// # Ok(()) } /// ``` - #[cfg_attr(master3, heed_master3_proc_macro::mut_read_txn(txn))] pub fn prefix_iter<'a, 'txn>( &self, txn: &'txn RoTxn, @@ -1617,10 +1601,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1691,10 +1675,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1725,7 +1709,6 @@ impl Database { /// wtxn.commit()?; /// # Ok(()) } /// ``` - #[cfg_attr(master3, heed_master3_proc_macro::mut_read_txn(txn))] pub fn rev_prefix_iter<'a, 'txn>( &self, txn: &'txn RoTxn, @@ -1750,10 +1733,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1819,10 +1802,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1881,11 +1864,11 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; + /// # use heed3::EnvOpenOptions; /// use std::io::Write; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1954,10 +1937,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::{Database, PutFlags, DatabaseFlags, Error, MdbError}; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::{Database, PutFlags, DatabaseFlags, Error, MdbError}; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -2046,10 +2029,10 @@ impl Database { /// The entry is always written with the [`NO_OVERWRITE`](PutFlags::NO_OVERWRITE) flag. /// /// ``` - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -2093,10 +2076,10 @@ impl Database { /// [`NO_OVERWRITE`](PutFlags::NO_OVERWRITE) which is always used. /// /// ``` - /// # use heed::EnvOpenOptions; - /// use heed::{Database, PutFlags}; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::{Database, PutFlags}; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -2170,11 +2153,11 @@ impl Database { /// [`MDB_RESERVE`](ffi::MDB_RESERVE) flags. /// /// ``` - /// # use heed::EnvOpenOptions; + /// # use heed3::EnvOpenOptions; /// use std::io::Write; - /// use heed::{Database, PutFlags}; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// use heed3::{Database, PutFlags}; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -2234,11 +2217,11 @@ impl Database { /// which are always used. /// /// ``` - /// # use heed::EnvOpenOptions; + /// # use heed3::EnvOpenOptions; /// use std::io::Write; - /// use heed::{Database, PutFlags}; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// use heed3::{Database, PutFlags}; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -2335,10 +2318,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -2403,9 +2386,9 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::{DatabaseFlags, EnvOpenOptions}; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::{DatabaseFlags, EnvOpenOptions}; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -2499,10 +2482,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -2567,10 +2550,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -2620,10 +2603,10 @@ impl Database { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; diff --git a/heed/src/databases/encrypted_database.rs b/heed/src/databases/encrypted_database.rs index 60b75b20..3d1b45cd 100644 --- a/heed/src/databases/encrypted_database.rs +++ b/heed/src/databases/encrypted_database.rs @@ -1,16 +1,12 @@ -use std::borrow::Cow; -use std::ops::{Bound, RangeBounds}; -use std::{any, fmt, marker, mem, ptr}; +use std::ops::RangeBounds; +use std::{any, fmt}; use heed_traits::{Comparator, LexicographicComparator}; -use types::{DecodeIgnore, LazyDecode}; +use types::LazyDecode; -use crate::cursor::MoveOperation; -use crate::env::DefaultComparator; +use crate::envs::DefaultComparator; use crate::iteration_method::MoveOnCurrentKeyDuplicates; -use crate::mdb::error::mdb_result; -use crate::mdb::ffi; -use crate::mdb::lmdb_flags::{AllDatabaseFlags, DatabaseFlags}; +use crate::mdb::lmdb_flags::DatabaseFlags; use crate::*; /// Options and flags which can be used to configure how a [`Database`] is opened. @@ -22,9 +18,9 @@ use crate::*; /// ``` /// # use std::fs; /// # use std::path::Path; -/// # use heed::EnvOpenOptions; -/// use heed::types::*; -/// use heed::byteorder::BigEndian; +/// # use heed3::EnvOpenOptions; +/// use heed3::types::*; +/// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -61,8 +57,8 @@ pub struct EncryptedDatabaseOpenOptions<'e, 'n, KC, DC, C = DefaultComparator> { impl<'e> EncryptedDatabaseOpenOptions<'e, 'static, Unspecified, Unspecified> { /// Create an options struct to open/create a database with specific flags. - pub fn new(env: &'e Env) -> Self { - EncryptedDatabaseOpenOptions { inner: DatabaseOpenOptions::new(env) } + pub fn new(env: &'e EncryptedEnv) -> Self { + EncryptedDatabaseOpenOptions { inner: DatabaseOpenOptions::new(&env.inner) } } } @@ -119,7 +115,7 @@ impl<'e, 'n, KC, DC, C> EncryptedDatabaseOpenOptions<'e, 'n, KC, DC, C> { DC: 'static, C: Comparator + 'static, { - self.inner.open(rtxn) + self.inner.open(rtxn).map(|opt| opt.map(EncryptedDatabase::new)) } /// Creates a typed database that can already exist in this environment. @@ -137,7 +133,7 @@ impl<'e, 'n, KC, DC, C> EncryptedDatabaseOpenOptions<'e, 'n, KC, DC, C> { DC: 'static, C: Comparator + 'static, { - self.inner.create(wtxn) + self.inner.create(wtxn).map(EncryptedDatabase::new) } } @@ -160,10 +156,10 @@ impl Copy for EncryptedDatabaseOpenOptions<'_, '_, KC, DC, C> {} /// ``` /// # use std::fs; /// # use std::path::Path; -/// # use heed::EnvOpenOptions; -/// use heed::Database; -/// use heed::types::*; -/// use heed::byteorder::BigEndian; +/// # use heed3::EnvOpenOptions; +/// use heed3::Database; +/// use heed3::types::*; +/// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -208,10 +204,10 @@ impl Copy for EncryptedDatabaseOpenOptions<'_, '_, KC, DC, C> {} /// ``` /// # use std::fs; /// # use std::path::Path; -/// # use heed::EnvOpenOptions; -/// use heed::Database; -/// use heed::types::*; -/// use heed::byteorder::BigEndian; +/// # use heed3::EnvOpenOptions; +/// use heed3::Database; +/// use heed3::types::*; +/// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -266,8 +262,8 @@ pub struct EncryptedDatabase { } impl EncryptedDatabase { - pub(crate) fn new(env_ident: usize, dbi: ffi::MDB_dbi) -> Database { - EncryptedDatabase { inner: Database::mew(env_ident, dbi) } + pub(crate) fn new(inner: Database) -> EncryptedDatabase { + EncryptedDatabase { inner } } /// Retrieves the value associated with a key. @@ -277,10 +273,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -327,9 +323,9 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::{DatabaseFlags, EnvOpenOptions}; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::{DatabaseFlags, EnvOpenOptions}; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -392,10 +388,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -448,10 +444,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -504,10 +500,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -560,10 +556,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -615,10 +611,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -659,10 +655,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -699,10 +695,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -742,10 +738,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -785,10 +781,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -830,10 +826,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -871,10 +867,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -928,10 +924,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -970,10 +966,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1029,10 +1025,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1082,10 +1078,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1151,10 +1147,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1204,10 +1200,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1273,10 +1269,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1327,10 +1323,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1397,10 +1393,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1451,10 +1447,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1516,10 +1512,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1559,11 +1555,11 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; + /// # use heed3::EnvOpenOptions; /// use std::io::Write; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1609,10 +1605,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::{Database, PutFlags, DatabaseFlags, Error, MdbError}; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::{Database, PutFlags, DatabaseFlags, Error, MdbError}; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1682,10 +1678,10 @@ impl EncryptedDatabase { /// The entry is always written with the [`NO_OVERWRITE`](PutFlags::NO_OVERWRITE) flag. /// /// ``` - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1729,10 +1725,10 @@ impl EncryptedDatabase { /// [`NO_OVERWRITE`](PutFlags::NO_OVERWRITE) which is always used. /// /// ``` - /// # use heed::EnvOpenOptions; - /// use heed::{Database, PutFlags}; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::{Database, PutFlags}; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1777,11 +1773,11 @@ impl EncryptedDatabase { /// [`MDB_RESERVE`](ffi::MDB_RESERVE) flags. /// /// ``` - /// # use heed::EnvOpenOptions; + /// # use heed3::EnvOpenOptions; /// use std::io::Write; - /// use heed::{Database, PutFlags}; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// use heed3::{Database, PutFlags}; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1841,11 +1837,11 @@ impl EncryptedDatabase { /// which are always used. /// /// ``` - /// # use heed::EnvOpenOptions; + /// # use heed3::EnvOpenOptions; /// use std::io::Write; - /// use heed::{Database, PutFlags}; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// use heed3::{Database, PutFlags}; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1906,10 +1902,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -1956,9 +1952,9 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::{DatabaseFlags, EnvOpenOptions}; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::{DatabaseFlags, EnvOpenOptions}; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -2032,10 +2028,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -2074,7 +2070,7 @@ impl EncryptedDatabase { KC: BytesEncode<'a> + BytesDecode<'txn>, R: RangeBounds, { - self.inner.delete_range(range) + self.inner.delete_range(txn, range) } /// Deletes all key/value pairs in this database. @@ -2087,10 +2083,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -2119,7 +2115,7 @@ impl EncryptedDatabase { /// # Ok(()) } /// ``` pub fn clear(&self, txn: &mut RwTxn) -> Result<()> { - self.inner.clear() + self.inner.clear(txn) } /// Change the codec types of this database, specifying the codecs. @@ -2135,10 +2131,10 @@ impl EncryptedDatabase { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::EnvOpenOptions; - /// use heed::Database; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::EnvOpenOptions; + /// use heed3::Database; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -2164,7 +2160,7 @@ impl EncryptedDatabase { /// # Ok(()) } /// ``` pub fn remap_types(&self) -> EncryptedDatabase { - EncryptedDatabase::new(self.inner.env_ident, self.inner.dbi) + EncryptedDatabase::new(self.inner.remap_types::()) } /// Change the key codec type of this database, specifying the new codec. diff --git a/heed/src/envs/encrypted_env.rs b/heed/src/envs/encrypted_env.rs index 2c38e651..d173201d 100644 --- a/heed/src/envs/encrypted_env.rs +++ b/heed/src/envs/encrypted_env.rs @@ -1,46 +1,28 @@ -use std::any::TypeId; -use std::ffi::CString; +use std::fmt; use std::fs::File; -use std::path::{Path, PathBuf}; -use std::ptr::{self, NonNull}; -use std::{fmt, io, mem}; - -use heed_traits::Comparator; -use lmdb_master_sys::mdb_env_close; - -use super::{ - custom_key_cmp_wrapper, get_file_fd, metadata_from_fd, DefaultComparator, EnvInfo, FlagSetMode, - OPENED_ENV, -}; -use crate::cursor::{MoveOperation, RoCursor}; -use crate::mdb::ffi::{self, MDB_env}; -use crate::mdb::lmdb_error::mdb_result; -use crate::mdb::lmdb_flags::AllDatabaseFlags; -use crate::{ - CompactionOption, Database, DatabaseOpenOptions, EnvFlags, Error, Result, RoTxn, RwTxn, - Unspecified, -}; +use std::panic::catch_unwind; +use std::path::Path; + +use aead::generic_array::typenum::Unsigned; +use aead::{AeadMutInPlace, Key, KeyInit, Nonce, Tag}; + +use super::{Env, EnvInfo, FlagSetMode}; +use crate::databases::{EncryptedDatabase, EncryptedDatabaseOpenOptions}; +use crate::mdb::ffi::{self}; +use crate::{CompactionOption, EnvFlags, Result, RoTxn, RwTxn, Unspecified}; /// An environment handle constructed by using [`EnvOpenOptions::open_encrypted`]. pub struct EncryptedEnv { - inner: Env, + pub(crate) inner: Env, } -impl Env { - pub(crate) fn new(env_ptr: NonNull, path: PathBuf) -> Env { - Env { env_ptr, path } - } - - pub(crate) fn env_mut_ptr(&self) -> NonNull { - self.inner.env_mut_ptr() - } - +impl EncryptedEnv { /// The size of the data file on disk. /// /// # Example /// /// ``` - /// use heed::EnvOpenOptions; + /// use heed3::EnvOpenOptions; /// /// # fn main() -> Result<(), Box> { /// let dir = tempfile::tempdir()?; @@ -67,8 +49,8 @@ impl Env { /// ``` /// use std::fs; /// use std::path::Path; - /// use heed::{EnvOpenOptions, Database, EnvFlags, FlagSetMode}; - /// use heed::types::*; + /// use heed3::{EnvOpenOptions, Database, EnvFlags, FlagSetMode}; + /// use heed3::types::*; /// /// # fn main() -> Result<(), Box> { /// fs::create_dir_all(Path::new("target").join("database.mdb"))?; @@ -182,24 +164,6 @@ impl Env { options.create(wtxn) } - pub(crate) fn raw_init_database( - &self, - raw_txn: *mut ffi::MDB_txn, - name: Option<&str>, - flags: AllDatabaseFlags, - ) -> Result { - self.inner.raw_init_database(raw_txn, name, flags) - } - - fn raw_open_dbi( - &self, - raw_txn: *mut ffi::MDB_txn, - name: Option<&str>, - flags: u32, - ) -> std::result::Result { - self.inner.raw_open_dbi(raw_txn, name, flags) - } - /// Create a transaction with read and write access for use with the environment. /// /// ## LMDB Limitations @@ -346,7 +310,9 @@ unsafe impl Sync for EncryptedEnv {} impl fmt::Debug for EncryptedEnv { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - f.debug_struct("EncryptedEnv").field("path", &self.path.display()).finish_non_exhaustive() + f.debug_struct("EncryptedEnv") + .field("path", &self.inner.path.display()) + .finish_non_exhaustive() } } @@ -359,7 +325,7 @@ fn encrypt( auth_out: &mut [u8], ) -> aead::Result<()> { chipertext_out.copy_from_slice(plaintext); - let key: &Key = key.try_into().unwrap(); + let key: &Key = key.into(); let nonce: &Nonce = if nonce.len() >= A::NonceSize::USIZE { nonce[..A::NonceSize::USIZE].into() } else { @@ -380,20 +346,20 @@ fn decrypt( auth_in: &[u8], ) -> aead::Result<()> { output.copy_from_slice(chipher_text); - let key: &Key = key.try_into().unwrap(); + let key: &Key = key.into(); let nonce: &Nonce = if nonce.len() >= A::NonceSize::USIZE { nonce[..A::NonceSize::USIZE].into() } else { return Err(aead::Error); }; - let tag: &Tag = auth_in.try_into().unwrap(); + let tag: &Tag = auth_in.into(); let mut aead = A::new(key); aead.decrypt_in_place_detached(nonce, aad, output, tag) } /// The wrapper function that is called by LMDB that directly calls /// the Rust idiomatic function internally. -unsafe extern "C" fn encrypt_func_wrapper( +pub(crate) unsafe extern "C" fn encrypt_func_wrapper( src: *const ffi::MDB_val, dst: *mut ffi::MDB_val, key_ptr: *const ffi::MDB_val, @@ -415,16 +381,13 @@ unsafe extern "C" fn encrypt_func_wrapper( let aad = []; let nonce = iv; let result = if encdec == 1 { - encrypt::(&key, nonce, &aad, input, output, auth) + encrypt::(key, nonce, &aad, input, output, auth) } else { - decrypt::(&key, nonce, &aad, input, output, auth) + decrypt::(key, nonce, &aad, input, output, auth) }; result.is_err() as i32 }); - match result { - Ok(out) => out, - Err(_) => 1, - } + result.unwrap_or(1) } diff --git a/heed/src/envs/env.rs b/heed/src/envs/env.rs index 2f3080c9..611f4dbd 100644 --- a/heed/src/envs/env.rs +++ b/heed/src/envs/env.rs @@ -6,7 +6,6 @@ use std::ptr::{self, NonNull}; use std::{fmt, io, mem}; use heed_traits::Comparator; -use lmdb_master_sys::mdb_env_close; use super::{ custom_key_cmp_wrapper, get_file_fd, metadata_from_fd, DefaultComparator, EnvInfo, FlagSetMode, @@ -24,7 +23,7 @@ use crate::{ /// An environment handle constructed by using [`EnvOpenOptions::open`]. pub struct Env { env_ptr: NonNull, - path: PathBuf, + pub(crate) path: PathBuf, } impl Env { @@ -41,7 +40,7 @@ impl Env { /// # Example /// /// ``` - /// use heed::EnvOpenOptions; + /// use heed3::EnvOpenOptions; /// /// # fn main() -> Result<(), Box> { /// let dir = tempfile::tempdir()?; @@ -72,8 +71,8 @@ impl Env { /// ``` /// use std::fs; /// use std::path::Path; - /// use heed::{EnvOpenOptions, Database, EnvFlags, FlagSetMode}; - /// use heed::types::*; + /// use heed3::{EnvOpenOptions, Database, EnvFlags, FlagSetMode}; + /// use heed3::types::*; /// /// # fn main() -> Result<(), Box> { /// fs::create_dir_all(Path::new("target").join("database.mdb"))?; @@ -466,7 +465,7 @@ impl fmt::Debug for Env { impl Drop for Env { fn drop(&mut self) { - unsafe { mdb_env_close(self.env_ptr.as_mut()) }; + unsafe { ffi::mdb_env_close(self.env_ptr.as_mut()) }; let mut lock = OPENED_ENV.write().unwrap(); debug_assert!(lock.remove(&self.path)); } diff --git a/heed/src/envs/env_open_options.rs b/heed/src/envs/env_open_options.rs index 0515e406..603eaf26 100644 --- a/heed/src/envs/env_open_options.rs +++ b/heed/src/envs/env_open_options.rs @@ -8,6 +8,11 @@ use std::path::Path; use std::ptr::NonNull; use std::{io, ptr}; +#[cfg(master3)] +use aead::{generic_array::typenum::Unsigned, AeadCore, AeadMutInPlace, Key, KeyInit}; + +#[cfg(master3)] +use super::encrypted_env::encrypt_func_wrapper; use super::env::Env; use super::{canonicalize_path, OPENED_ENV}; #[cfg(windows)] @@ -68,8 +73,8 @@ impl EnvOpenOptions { /// ``` /// use std::fs; /// use std::path::Path; - /// use heed::{EnvOpenOptions, Database, EnvFlags}; - /// use heed::types::*; + /// use heed3::{EnvOpenOptions, Database, EnvFlags}; + /// use heed3::types::*; /// /// # fn main() -> Result<(), Box> { /// fs::create_dir_all(Path::new("target").join("database.mdb"))?; @@ -357,7 +362,7 @@ impl EnvOpenOptions { let mut env: *mut ffi::MDB_env = ptr::null_mut(); mdb_result(ffi::mdb_env_create(&mut env))?; - let encrypt_key = crate::into_val(&self.encrypt); + let encrypt_key = crate::into_val(&key); mdb_result(ffi::mdb_env_set_encrypt( env, Some(encrypt_func_wrapper::), diff --git a/heed/src/envs/mod.rs b/heed/src/envs/mod.rs index 996b47e4..c2d2f251 100644 --- a/heed/src/envs/mod.rs +++ b/heed/src/envs/mod.rs @@ -25,7 +25,7 @@ mod env; mod env_open_options; #[cfg(master3)] -pub use env::EncryptedEnv; +pub use encrypted_env::EncryptedEnv; pub use env::Env; pub use env_open_options::EnvOpenOptions; diff --git a/heed/src/iterator/iter.rs b/heed/src/iterator/iter.rs index 87f67662..ebff162a 100644 --- a/heed/src/iterator/iter.rs +++ b/heed/src/iterator/iter.rs @@ -23,9 +23,9 @@ impl<'txn, KC, DC, IM> RoIter<'txn, KC, DC, IM> { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::{DatabaseFlags, EnvOpenOptions}; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::{DatabaseFlags, EnvOpenOptions}; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -76,9 +76,9 @@ impl<'txn, KC, DC, IM> RoIter<'txn, KC, DC, IM> { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::{DatabaseFlags, EnvOpenOptions}; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::{DatabaseFlags, EnvOpenOptions}; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; diff --git a/heed/src/lib.rs b/heed/src/lib.rs index fa2c06ac..269ab9af 100644 --- a/heed/src/lib.rs +++ b/heed/src/lib.rs @@ -31,8 +31,8 @@ //! ``` //! use std::fs; //! use std::path::Path; -//! use heed::{EnvOpenOptions, Database}; -//! use heed::types::*; +//! use heed3::{EnvOpenOptions, Database}; +//! use heed3::types::*; //! //! # fn main() -> Result<(), Box> { //! let dir = tempfile::tempdir()?; @@ -80,6 +80,10 @@ pub use {byteorder, heed_types as types}; use self::cursor::{RoCursor, RwCursor}; pub use self::databases::{Database, DatabaseOpenOptions, DatabaseStat}; +#[cfg(master3)] +pub use self::databases::{EncryptedDatabase, EncryptedDatabaseOpenOptions}; +#[cfg(master3)] +pub use self::envs::EncryptedEnv; pub use self::envs::{ CompactionOption, DefaultComparator, Env, EnvInfo, EnvOpenOptions, FlagSetMode, }; @@ -110,7 +114,7 @@ pub struct LmdbVersion { /// Return the LMDB library version information. /// /// ``` -/// use heed::{lmdb_version, LmdbVersion}; +/// use heed3::{lmdb_version, LmdbVersion}; /// /// let expected = LmdbVersion { /// string: "LMDB 0.9.70: (December 19, 2015)", diff --git a/heed/src/mdb/lmdb_flags.rs b/heed/src/mdb/lmdb_flags.rs index ed999209..367c4d09 100644 --- a/heed/src/mdb/lmdb_flags.rs +++ b/heed/src/mdb/lmdb_flags.rs @@ -70,9 +70,9 @@ bitflags! { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::{DatabaseFlags, EnvOpenOptions}; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::{DatabaseFlags, EnvOpenOptions}; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -117,9 +117,9 @@ bitflags! { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::{DatabaseFlags, EnvOpenOptions}; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::{DatabaseFlags, EnvOpenOptions}; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -178,9 +178,9 @@ bitflags! { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::{DatabaseFlags, EnvOpenOptions}; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::{DatabaseFlags, EnvOpenOptions}; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -223,9 +223,9 @@ bitflags! { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::{DatabaseFlags, EnvOpenOptions}; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::{DatabaseFlags, EnvOpenOptions}; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -283,9 +283,9 @@ bitflags! { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::{DatabaseFlags, EnvOpenOptions}; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::{DatabaseFlags, EnvOpenOptions}; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?; @@ -343,9 +343,9 @@ bitflags! { /// ``` /// # use std::fs; /// # use std::path::Path; - /// # use heed::{DatabaseFlags, EnvOpenOptions}; - /// use heed::types::*; - /// use heed::byteorder::BigEndian; + /// # use heed3::{DatabaseFlags, EnvOpenOptions}; + /// use heed3::types::*; + /// use heed3::byteorder::BigEndian; /// /// # fn main() -> Result<(), Box> { /// # let dir = tempfile::tempdir()?;