diff --git a/Cargo.toml b/Cargo.toml index 1f198bb..1f4fac1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,19 +12,24 @@ publish = true edition = "2018" include = ["src/**/*", "src/*", "Cargo.toml", "LICENSE", "README.md"] +[lib] +crate-type = ["cdylib", "rlib"] + [dependencies] crc = "1.8" integer-encoding = "3.0" -rand = "0.7" +rand = "0.8.5" snap = "1.0" -errno = "0.2" -fs2 = "0.4.3" + +errno = { optional = true, version = "0.2" } +fs2 = {optional = true, version = "0.4.3"} tokio = { optional = true, features = ["rt", "sync"], version = ">= 1.21" } [features] -default = [] +default = ["fs"] async = ["tokio"] +fs = ["errno", "fs2"] [dev-dependencies] time-test = "0.2" diff --git a/src/error.rs b/src/error.rs index 4bfd3a6..0467d91 100644 --- a/src/error.rs +++ b/src/error.rs @@ -5,7 +5,9 @@ use std::io; use std::result; use std::sync; +#[cfg(feature = "fs")] use errno; + use snap; /// StatusCode describes various failure modes of database operations. @@ -26,6 +28,7 @@ pub enum StatusCode { PermissionDenied, AsyncError, Unknown, + #[cfg(feature = "fs")] Errno(errno::Errno), } diff --git a/src/lib.rs b/src/lib.rs index af22e18..927d6d7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -24,8 +24,13 @@ #![allow(dead_code)] extern crate crc; + +#[cfg(feature = "fs")] extern crate errno; + +#[cfg(feature = "fs")] extern crate fs2; + extern crate integer_encoding; extern crate rand; extern crate snap; @@ -45,8 +50,10 @@ mod block_builder; mod blockhandle; mod cache; mod cmp; + +#[cfg(feature = "fs")] mod disk_env; -mod env; + mod env_common; mod error; mod filter; @@ -73,6 +80,7 @@ mod write_batch; mod db_impl; mod db_iter; +pub mod env; pub mod compressor; #[cfg(feature = "async")] @@ -82,8 +90,10 @@ pub use cmp::{Cmp, DefaultCmp}; pub use compressor::{Compressor, CompressorId}; pub use db_impl::DB; pub use db_iter::DBIterator; + +#[cfg(feature = "fs")] pub use disk_env::PosixDiskEnv; -pub use env::Env; + pub use error::{Result, Status, StatusCode}; pub use filter::{BloomPolicy, FilterPolicy}; pub use mem_env::MemEnv; diff --git a/src/options.rs b/src/options.rs index ce72a35..2502d46 100644 --- a/src/options.rs +++ b/src/options.rs @@ -6,7 +6,7 @@ use crate::env::Env; use crate::infolog::{self, Logger}; use crate::mem_env::MemEnv; use crate::types::{share, Shared}; -use crate::{disk_env, Result}; +use crate::Result; use crate::{filter, Status, StatusCode}; use std::default::Default; @@ -48,11 +48,17 @@ pub struct Options { pub filter_policy: filter::BoxedFilterPolicy, } +#[cfg(feature = "fs")] +type DefaultEnv = crate::disk_env::PosixDiskEnv; + +#[cfg(not(feature = "fs"))] +type DefaultEnv = crate::mem_env::MemEnv; + impl Default for Options { fn default() -> Options { Options { cmp: Rc::new(Box::new(DefaultCmp)), - env: Rc::new(Box::new(disk_env::PosixDiskEnv::new())), + env: Rc::new(Box::new(DefaultEnv::new())), log: None, create_if_missing: true, error_if_exists: false,