From 5deb65f9689b43e0ea813be2aecaa0719f32f229 Mon Sep 17 00:00:00 2001 From: Chen Date: Wed, 11 May 2022 10:56:41 +0800 Subject: [PATCH] remove dependency to db-key --- Cargo.toml | 1 - src/database/key.rs | 25 +++++++++++++++++++++++++ src/database/mod.rs | 3 +-- tests/comparator.rs | 2 +- tests/tests.rs | 3 +-- tests/utils.rs | 3 ++- 6 files changed, 30 insertions(+), 7 deletions(-) create mode 100644 src/database/key.rs diff --git a/Cargo.toml b/Cargo.toml index da41586..44a47f4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,7 +24,6 @@ name = "leveldb" [dependencies] -db-key = "0.0.5" libc = "0.2.4" [dependencies.leveldb-sys] diff --git a/src/database/key.rs b/src/database/key.rs new file mode 100644 index 0000000..d81a5fa --- /dev/null +++ b/src/database/key.rs @@ -0,0 +1,25 @@ +pub trait Key { + fn from_u8(key: &[u8]) -> Self; + fn as_slice T>(&self, f: F) -> T; +} + +pub fn from_u8(key: &[u8]) -> K { + Key::from_u8(key) +} + +impl Key for i32 { + fn from_u8(key: &[u8]) -> i32 { + assert!(key.len() == 4); + + (key[0] as i32) << 24 | (key[1] as i32) << 16 | (key[2] as i32) << 8 | (key[3] as i32) + } + + fn as_slice T>(&self, f: F) -> T { + let mut dst = [0u8, 0, 0, 0]; + dst[0] = (*self >> 24) as u8; + dst[1] = (*self >> 16) as u8; + dst[2] = (*self >> 8) as u8; + dst[3] = *self as u8; + f(&dst) + } +} diff --git a/src/database/mod.rs b/src/database/mod.rs index cd17f00..67d03a2 100644 --- a/src/database/mod.rs +++ b/src/database/mod.rs @@ -1,7 +1,5 @@ //! The main database module, allowing to interface with leveldb on //! a key-value basis. -extern crate db_key as key; - use leveldb_sys::*; use self::options::{Options, c_options}; @@ -28,6 +26,7 @@ pub mod batch; pub mod management; pub mod compaction; pub mod bytes; +pub mod key; #[allow(missing_docs)] struct RawDB { diff --git a/tests/comparator.rs b/tests/comparator.rs index f2c0236..8fa3ba1 100644 --- a/tests/comparator.rs +++ b/tests/comparator.rs @@ -1,7 +1,7 @@ #[cfg(test)] mod comparator { use libc::c_char; - use key::Key; + use leveldb::database::key::Key; use utils::{tmpdir, db_put_simple}; use leveldb::database::{Database}; use leveldb::iterator::Iterable; diff --git a/tests/tests.rs b/tests/tests.rs index 3d6f386..b993d93 100644 --- a/tests/tests.rs +++ b/tests/tests.rs @@ -1,4 +1,3 @@ -extern crate db_key as key; extern crate leveldb; extern crate tempdir; extern crate libc; @@ -13,4 +12,4 @@ mod cache; mod writebatch; mod management; mod compaction; -mod concurrent_access; \ No newline at end of file +mod concurrent_access; diff --git a/tests/utils.rs b/tests/utils.rs index e3f471c..876241c 100644 --- a/tests/utils.rs +++ b/tests/utils.rs @@ -1,9 +1,10 @@ use leveldb::database::Database; use leveldb::database::kv::{KV}; +use leveldb::database::key::Key; use leveldb::options::{Options,WriteOptions}; use std::path::Path; use tempdir::TempDir; -use key::Key; + pub fn open_database(path: &Path, create_if_missing: bool) -> Database { let mut opts = Options::new();