pub trait KeyValueDatabase:
WithError
+ 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(
config: &Self::Config,
namespace: &str,
) -> 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(
config: &Self::Config,
namespace: &str,
) -> impl Future<Output = Result<Vec<Vec<u8>>, Self::Error>> + Send + Sync
fn list_root_keys( config: &Self::Config, namespace: &str, ) -> 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", so this trait is not object safe.