pub trait KeyValueDatabase:
WithError
+ AutoTraits
+ Sized
+ Send
+ Sync {
type Config: Send + Sync;
type Store;
// Required methods
fn get_name() -> String;
fn connect(
config: &Self::Config,
namespace: &str,
) -> impl Future<Output = Result<Self, Self::Error>> + Send + Sync;
fn open_shared(&self, root_key: &[u8]) -> Result<Self::Store, Self::Error>;
fn open_exclusive(
&self,
root_key: &[u8],
) -> Result<Self::Store, Self::Error>;
fn list_all(
config: &Self::Config,
) -> impl Future<Output = Result<Vec<String>, Self::Error>> + Send + Sync;
fn list_root_keys(
&self,
) -> impl Future<Output = Result<Vec<Vec<u8>>, Self::Error>> + Send + Sync;
fn exists(
config: &Self::Config,
namespace: &str,
) -> impl Future<Output = Result<bool, Self::Error>> + Send + Sync;
fn create(
config: &Self::Config,
namespace: &str,
) -> impl Future<Output = Result<(), Self::Error>> + Send + Sync;
fn delete(
config: &Self::Config,
namespace: &str,
) -> impl Future<Output = Result<(), Self::Error>> + Send + Sync;
// Provided methods
fn delete_all(
config: &Self::Config,
) -> impl Future<Output = Result<(), Self::Error>> + Send + Sync { ... }
fn maybe_create_and_connect(
config: &Self::Config,
namespace: &str,
) -> impl Future<Output = Result<Self, Self::Error>> + Send + Sync { ... }
fn recreate_and_connect(
config: &Self::Config,
namespace: &str,
) -> impl Future<Output = Result<Self, Self::Error>> + Send + Sync { ... }
}Expand description
The definition of a key-value database.
Required Associated Types§
Required Methods§
Sourcefn connect(
config: &Self::Config,
namespace: &str,
) -> impl Future<Output = Result<Self, Self::Error>> + Send + Sync
fn connect( config: &Self::Config, namespace: &str, ) -> impl Future<Output = Result<Self, Self::Error>> + Send + Sync
Connects to an existing namespace using the given configuration.
Opens a shared partition starting at root_key. It is understood that the
partition MAY be read and written simultaneously from other clients.
Sourcefn open_exclusive(&self, root_key: &[u8]) -> Result<Self::Store, Self::Error>
fn open_exclusive(&self, root_key: &[u8]) -> Result<Self::Store, Self::Error>
Opens an exclusive partition starting at root_key. It is assumed that the
partition WILL NOT be read and written simultaneously by other clients.
IMPORTANT: This assumption is not enforced at the moment. However, future implementations may choose to return an error if another client is detected.
Sourcefn list_all(
config: &Self::Config,
) -> impl Future<Output = Result<Vec<String>, Self::Error>> + Send + Sync
fn list_all( config: &Self::Config, ) -> impl Future<Output = Result<Vec<String>, Self::Error>> + Send + Sync
Obtains the list of existing namespaces.
Sourcefn list_root_keys(
&self,
) -> impl Future<Output = Result<Vec<Vec<u8>>, Self::Error>> + Send + Sync
fn list_root_keys( &self, ) -> impl Future<Output = Result<Vec<Vec<u8>>, Self::Error>> + Send + Sync
Lists the root keys of the namespace. It is possible that some root keys have no keys.
Sourcefn exists(
config: &Self::Config,
namespace: &str,
) -> impl Future<Output = Result<bool, Self::Error>> + Send + Sync
fn exists( config: &Self::Config, namespace: &str, ) -> impl Future<Output = Result<bool, Self::Error>> + Send + Sync
Tests if a given namespace exists.
Provided Methods§
Sourcefn delete_all(
config: &Self::Config,
) -> impl Future<Output = Result<(), Self::Error>> + Send + Sync
fn delete_all( config: &Self::Config, ) -> impl Future<Output = Result<(), Self::Error>> + Send + Sync
Deletes all the existing namespaces.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".