pub trait AsyncStorageConnection:
HasSession
+ Sized
+ Send
+ Sync {
type Database: AsyncConnection;
type Authenticated: AsyncStorageConnection;
Show 17 methods
// Required methods
fn admin<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Self::Database> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn database<'life0, 'life1, 'async_trait, DB>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Self::Database, Error>> + Send + 'async_trait>>
where DB: 'async_trait + Schema,
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn create_database_with_schema<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
schema: SchemaName,
only_if_needed: bool,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn delete_database<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn list_databases<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<Database>, Error>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn list_available_schemas<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<SchemaSummary>, Error>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn create_user<'life0, 'life1, 'async_trait>(
&'life0 self,
username: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<u64, Error>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn delete_user<'user, 'life0, 'async_trait, U>(
&'life0 self,
user: U,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where U: 'async_trait + Nameable<'user, u64> + Send + Sync,
Self: 'async_trait,
'user: 'async_trait,
'life0: 'async_trait;
fn set_user_password<'user, 'life0, 'async_trait, U>(
&'life0 self,
user: U,
password: SensitiveString,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where U: 'async_trait + Nameable<'user, u64> + Send + Sync,
Self: 'async_trait,
'user: 'async_trait,
'life0: 'async_trait;
fn authenticate<'life0, 'async_trait>(
&'life0 self,
authentication: Authentication,
) -> Pin<Box<dyn Future<Output = Result<Self::Authenticated, Error>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn assume_identity<'life0, 'life1, 'async_trait>(
&'life0 self,
identity: IdentityReference<'life1>,
) -> Pin<Box<dyn Future<Output = Result<Self::Authenticated, Error>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn add_permission_group_to_user<'user, 'group, 'life0, 'async_trait, U, G>(
&'life0 self,
user: U,
permission_group: G,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where U: 'async_trait + Nameable<'user, u64> + Send + Sync,
G: 'async_trait + Nameable<'group, u64> + Send + Sync,
Self: 'async_trait,
'user: 'async_trait,
'group: 'async_trait,
'life0: 'async_trait;
fn remove_permission_group_from_user<'user, 'group, 'life0, 'async_trait, U, G>(
&'life0 self,
user: U,
permission_group: G,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where U: 'async_trait + Nameable<'user, u64> + Send + Sync,
G: 'async_trait + Nameable<'group, u64> + Send + Sync,
Self: 'async_trait,
'user: 'async_trait,
'group: 'async_trait,
'life0: 'async_trait;
fn add_role_to_user<'user, 'role, 'life0, 'async_trait, U, R>(
&'life0 self,
user: U,
role: R,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where U: 'async_trait + Nameable<'user, u64> + Send + Sync,
R: 'async_trait + Nameable<'role, u64> + Send + Sync,
Self: 'async_trait,
'user: 'async_trait,
'role: 'async_trait,
'life0: 'async_trait;
fn remove_role_from_user<'user, 'role, 'life0, 'async_trait, U, R>(
&'life0 self,
user: U,
role: R,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where U: 'async_trait + Nameable<'user, u64> + Send + Sync,
R: 'async_trait + Nameable<'role, u64> + Send + Sync,
Self: 'async_trait,
'user: 'async_trait,
'role: 'async_trait,
'life0: 'async_trait;
// Provided methods
fn create_database<'life0, 'life1, 'async_trait, DB>(
&'life0 self,
name: &'life1 str,
only_if_needed: bool,
) -> Pin<Box<dyn Future<Output = Result<Self::Database, Error>> + Send + 'async_trait>>
where DB: 'async_trait + Schema,
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
fn authenticate_with_password<'name, 'life0, 'async_trait, User>(
&'life0 self,
user: User,
password: SensitiveString,
) -> Pin<Box<dyn Future<Output = Result<Self::Authenticated, Error>> + Send + 'async_trait>>
where User: 'async_trait + Nameable<'name, u64> + Send,
Self: 'async_trait,
'name: 'async_trait,
'life0: 'async_trait { ... }
}Expand description
Functions for interacting with a multi-database BonsaiDb instance.
Required Associated Types§
Sourcetype Database: AsyncConnection
type Database: AsyncConnection
The type that represents a database for this implementation.
Sourcetype Authenticated: AsyncStorageConnection
type Authenticated: AsyncStorageConnection
The StorageConnection type returned from authentication calls.
Required Methods§
Sourcefn admin<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Self::Database> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn admin<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Self::Database> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Returns the currently authenticated session, if any.
Sourcefn database<'life0, 'life1, 'async_trait, DB>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Self::Database, Error>> + Send + 'async_trait>>where
DB: 'async_trait + Schema,
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn database<'life0, 'life1, 'async_trait, DB>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Self::Database, Error>> + Send + 'async_trait>>where
DB: 'async_trait + Schema,
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Returns a reference to database name with schema DB.
Sourcefn create_database_with_schema<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
schema: SchemaName,
only_if_needed: bool,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn create_database_with_schema<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
schema: SchemaName,
only_if_needed: bool,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Creates a database named name using the SchemaName schema.
§Errors
Error::InvalidDatabaseName:namemust begin with an alphanumeric character ([a-zA-Z0-9]), and all remaining characters must be alphanumeric, a period (.), or a hyphen (-).Error::DatabaseNameAlreadyTaken:namewas already used for a previous database name. Returned ifonly_if_neededis false.
Sourcefn delete_database<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete_database<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Deletes a database named name.
§Errors
Error::DatabaseNotFound: databasenamedoes not exist.Error::Other: an error occurred while deleting files.
Sourcefn list_databases<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<Database>, Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_databases<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<Database>, Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Lists the databases in this storage.
Sourcefn list_available_schemas<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<SchemaSummary>, Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_available_schemas<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<SchemaSummary>, Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Lists the SchemaNames registered with this storage.
Sourcefn create_user<'life0, 'life1, 'async_trait>(
&'life0 self,
username: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<u64, Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn create_user<'life0, 'life1, 'async_trait>(
&'life0 self,
username: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<u64, Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Creates a user.
Sourcefn delete_user<'user, 'life0, 'async_trait, U>(
&'life0 self,
user: U,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
fn delete_user<'user, 'life0, 'async_trait, U>( &'life0 self, user: U, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
Deletes a user.
Sourcefn set_user_password<'user, 'life0, 'async_trait, U>(
&'life0 self,
user: U,
password: SensitiveString,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
fn set_user_password<'user, 'life0, 'async_trait, U>( &'life0 self, user: U, password: SensitiveString, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
Sets a user’s password.
Sourcefn authenticate<'life0, 'async_trait>(
&'life0 self,
authentication: Authentication,
) -> Pin<Box<dyn Future<Output = Result<Self::Authenticated, Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn authenticate<'life0, 'async_trait>(
&'life0 self,
authentication: Authentication,
) -> Pin<Box<dyn Future<Output = Result<Self::Authenticated, Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Authenticates using an
AuthenticationToken. If
successful, the returned instance will have the permissions from
identity.
Sourcefn assume_identity<'life0, 'life1, 'async_trait>(
&'life0 self,
identity: IdentityReference<'life1>,
) -> Pin<Box<dyn Future<Output = Result<Self::Authenticated, Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn assume_identity<'life0, 'life1, 'async_trait>(
&'life0 self,
identity: IdentityReference<'life1>,
) -> Pin<Box<dyn Future<Output = Result<Self::Authenticated, Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Assumes the identity. If successful, the returned instance will have
the merged permissions of the current authentication session and the
permissions from identity.
Sourcefn add_permission_group_to_user<'user, 'group, 'life0, 'async_trait, U, G>(
&'life0 self,
user: U,
permission_group: G,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
fn add_permission_group_to_user<'user, 'group, 'life0, 'async_trait, U, G>( &'life0 self, user: U, permission_group: G, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
Adds a user to a permission group.
Sourcefn remove_permission_group_from_user<'user, 'group, 'life0, 'async_trait, U, G>(
&'life0 self,
user: U,
permission_group: G,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
fn remove_permission_group_from_user<'user, 'group, 'life0, 'async_trait, U, G>( &'life0 self, user: U, permission_group: G, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
Removes a user from a permission group.
Sourcefn add_role_to_user<'user, 'role, 'life0, 'async_trait, U, R>(
&'life0 self,
user: U,
role: R,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
fn add_role_to_user<'user, 'role, 'life0, 'async_trait, U, R>( &'life0 self, user: U, role: R, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
Adds a user to a permission group.
Provided Methods§
Sourcefn create_database<'life0, 'life1, 'async_trait, DB>(
&'life0 self,
name: &'life1 str,
only_if_needed: bool,
) -> Pin<Box<dyn Future<Output = Result<Self::Database, Error>> + Send + 'async_trait>>where
DB: 'async_trait + Schema,
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn create_database<'life0, 'life1, 'async_trait, DB>(
&'life0 self,
name: &'life1 str,
only_if_needed: bool,
) -> Pin<Box<dyn Future<Output = Result<Self::Database, Error>> + Send + 'async_trait>>where
DB: 'async_trait + Schema,
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Creates a database named name with the Schema provided.
§Errors
Error::InvalidDatabaseName:namemust begin with an alphanumeric character ([a-zA-Z0-9]), and all remaining characters must be alphanumeric, a period (.), or a hyphen (-).Error::DatabaseNameAlreadyTaken:namewas already used for a previous database name. Returned ifonly_if_neededis false.
Sourcefn authenticate_with_password<'name, 'life0, 'async_trait, User>(
&'life0 self,
user: User,
password: SensitiveString,
) -> Pin<Box<dyn Future<Output = Result<Self::Authenticated, Error>> + Send + 'async_trait>>
fn authenticate_with_password<'name, 'life0, 'async_trait, User>( &'life0 self, user: User, password: SensitiveString, ) -> Pin<Box<dyn Future<Output = Result<Self::Authenticated, Error>> + Send + 'async_trait>>
Authenticates a User using a password. If
successful, the returned instance will have the permissions from
identity.
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.