diff options
author | Zdenek Crha <zdenek.crha@gmail.com> | 2024-01-22 20:38:14 +0100 |
---|---|---|
committer | Zdenek Crha <zdenek.crha@gmail.com> | 2024-01-22 21:12:02 +0100 |
commit | 0eef8a69f0006de305281dd374cc63e7a46e4b80 (patch) | |
tree | 5a4282d7cc148d0566784aaceb1691753e29f38b /src/db/lib.rs | |
parent | 74e72fc99690e24de498e42d87fc04a123f712d5 (diff) | |
download | garage-0eef8a69f0006de305281dd374cc63e7a46e4b80.tar.gz garage-0eef8a69f0006de305281dd374cc63e7a46e4b80.zip |
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.
Diffstat (limited to 'src/db/lib.rs')
-rw-r--r-- | src/db/lib.rs | 37 |
1 files changed, 16 insertions, 21 deletions
diff --git a/src/db/lib.rs b/src/db/lib.rs index 427140f9..eef3e177 100644 --- a/src/db/lib.rs +++ b/src/db/lib.rs @@ -172,47 +172,42 @@ 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 std::fmt::Display for Engine { - fn fmt(&self, fmt: &mut std::fmt::Formatter) -> std::fmt::Result { +impl Engine { + /// Return variant name as static `&str` + pub fn as_str(&self) -> &'static str { 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::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 { + self.as_str().fmt(fmt) + } +} + impl std::str::FromStr for Engine { type Err = Error; 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())), } } |