forked from Deuxfleurs/garage
make all garage_db::Engine variants un-conditional
Having all Engine enum variants conditional causes compilation errors when *none* of the DB engine features is enabled. This is not an issue for full garage build, but affects crates that use garage_db as dependency. Change all variants to be present at all times. It solves compilation errors and also allows us to better differentiate between invalid DB engine name and engine with support not compiled in current binary.
This commit is contained in:
parent
74e72fc996
commit
0eef8a69f0
2 changed files with 24 additions and 21 deletions
|
@ -172,30 +172,31 @@ impl Db {
|
|||
}
|
||||
|
||||
/// List of supported database engine types
|
||||
///
|
||||
/// The `enum` holds list of *all* database engines that are are be supported by crate, no matter
|
||||
/// if relevant feature is enabled or not. It allows us to distinguish between invalid engine
|
||||
/// and valid engine, whose support is not enabled via feature flag.
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
||||
pub enum Engine {
|
||||
#[cfg(feature = "lmdb")]
|
||||
Lmdb,
|
||||
|
||||
#[cfg(feature = "sqlite")]
|
||||
Sqlite,
|
||||
|
||||
#[cfg(feature = "sled")]
|
||||
Sled,
|
||||
}
|
||||
|
||||
impl Engine {
|
||||
/// Return variant name as static `&str`
|
||||
pub fn as_str(&self) -> &'static str {
|
||||
match self {
|
||||
Self::Lmdb => "lmdb",
|
||||
Self::Sqlite => "sqlite",
|
||||
Self::Sled => "sled",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl std::fmt::Display for Engine {
|
||||
fn fmt(&self, fmt: &mut std::fmt::Formatter) -> std::fmt::Result {
|
||||
match self {
|
||||
#[cfg(feature = "lmdb")]
|
||||
Self::Lmdb => fmt.write_str("lmdb"),
|
||||
|
||||
#[cfg(feature = "sqlite")]
|
||||
Self::Sqlite => fmt.write_str("sqlite"),
|
||||
|
||||
#[cfg(feature = "sled")]
|
||||
Self::Sled => fmt.write_str("sled"),
|
||||
}
|
||||
self.as_str().fmt(fmt)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -204,15 +205,9 @@ impl std::str::FromStr for Engine {
|
|||
|
||||
fn from_str(text: &str) -> Result<Engine> {
|
||||
match text {
|
||||
#[cfg(feature = "lmdb")]
|
||||
"lmdb" | "heed" => Ok(Self::Lmdb),
|
||||
|
||||
#[cfg(feature = "sqlite")]
|
||||
"sqlite" | "sqlite3" | "rusqlite" => Ok(Self::Sqlite),
|
||||
|
||||
#[cfg(feature = "sled")]
|
||||
"sled" => Ok(Self::Sled),
|
||||
|
||||
kind => Err(Error(format!("Invalid DB engine: {}", kind).into())),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -91,5 +91,13 @@ fn open_db(path: PathBuf, engine: Engine, open: &OpenDbOpt) -> Result<Db> {
|
|||
let db = env_builder.open(&path)?;
|
||||
Ok(lmdb_adapter::LmdbDb::init(db))
|
||||
}
|
||||
|
||||
// Pattern is unreachable when all supported DB engines are compiled into binary. The allow
|
||||
// attribute is added so that we won't have to change this match in case stop building
|
||||
// support for one or more engines by default.
|
||||
#[allow(unreachable_patterns)]
|
||||
engine => Err(Error(
|
||||
format!("Engine support not available in this build: {}", engine).into(),
|
||||
)),
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue