Struct bonsaidb_client::Client
source · [−]pub struct Client { /* private fields */ }Expand description
Client for connecting to a BonsaiDb server.
Connecting via QUIC
The URL scheme to connect via QUIC is bonsaidb. If no port is specified,
port 5645 is assumed.
With a valid TLS certificate
let client = Client::build(Url::parse("bonsaidb://my-server.com")?).finish()?;With a Self-Signed Pinned Certificate
When using install_self_signed_certificate(), clients will need the
contents of the pinned-certificate.der file within the database. It can be
specified when building the client:
let certificate =
Certificate::from_der(std::fs::read("mydb.bonsaidb/pinned-certificate.der")?)?;
let client = Client::build(Url::parse("bonsaidb://localhost")?)
.with_certificate(certificate)
.finish()?;Connecting via WebSockets
WebSockets are built atop the HTTP protocol. There are two URL schemes for WebSockets:
ws: Insecure WebSockets. Port 80 is assumed if no port is specified.wss: Secure WebSockets. Port 443 is assumed if no port is specified.
Without TLS
let client = Client::build(Url::parse("ws://localhost")?).finish()?;With TLS
let client = Client::build(Url::parse("wss://my-server.com")?).finish()?;Using a Api
Our user guide has a section on creating and
using
an Api.
// `bonsaidb_core` is re-exported to `bonsaidb::core` or `bonsaidb_client::core`.
use bonsaidb_core::{
api::{Api, Infallible},
schema::{ApiName, Qualified},
};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug)]
pub struct Ping;
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct Pong;
impl Api for Ping {
type Response = Pong;
type Error = Infallible;
fn name() -> ApiName {
ApiName::private("ping")
}
}
let client = Client::build(Url::parse("bonsaidb://localhost")?).finish()?;
let Pong = client.send_api_request_async(&Ping).await?;Receiving out-of-band messages from the server
If the server sends a message that isn’t in response to a request, the client will invoke it’s api callback:
let client = Client::build(Url::parse("bonsaidb://localhost")?)
.with_api_callback(ApiCallback::<Ping>::new(|result: Pong| async move {
println!("Received out-of-band Pong");
}))
.finish()?;Implementations
sourceimpl Client
impl Client
sourcepub fn new(url: Url) -> Result<Self, Error>
pub fn new(url: Url) -> Result<Self, Error>
Initialize a client connecting to url. This client can be shared by
cloning it. All requests are done asynchronously over the same
connection.
If the client has an error connecting, the first request made will
present that error. If the client disconnects while processing requests,
all requests being processed will exit and return
Error::Disconnected. The client will automatically try reconnecting.
The goal of this design of this reconnection strategy is to make it easier to build resilliant apps. By allowing existing Client instances to recover and reconnect, each component of the apps built can adopt a “retry-to-recover” design, or “abort-and-fail” depending on how critical the database is to operation.
sourcepub async fn send_api_request_async<Api: Api>(
&self,
request: &Api
) -> Result<Api::Response, ApiError<Api::Error>>
pub async fn send_api_request_async<Api: Api>(
&self,
request: &Api
) -> Result<Api::Response, ApiError<Api::Error>>
Sends an api request.
sourcepub fn invoke_api_request<Api: Api>(&self, request: &Api) -> Result<(), Error>
pub fn invoke_api_request<Api: Api>(&self, request: &Api) -> Result<(), Error>
Sends an api request without waiting for a result. The response from
the server will be ignored.
sourcepub fn send_api_request<Api: Api>(
&self,
request: &Api
) -> Result<Api::Response, ApiError<Api::Error>>
pub fn send_api_request<Api: Api>(
&self,
request: &Api
) -> Result<Api::Response, ApiError<Api::Error>>
Sends an api request.
sourcepub async fn effective_permissions(&self) -> Option<Permissions>
pub async fn effective_permissions(&self) -> Option<Permissions>
Returns the current effective permissions for the client. Returns None if unauthenticated.
Trait Implementations
sourceimpl AsyncStorageConnection for Client
impl AsyncStorageConnection for Client
type Database = RemoteDatabase
type Database = RemoteDatabase
The type that represents a database for this implementation.
type Authenticated = Self
type Authenticated = Self
The StorageConnection type returned from authentication calls.
sourcefn admin<'life0, 'async_trait>(
&'life0 self
) -> Pin<Box<dyn Future<Output = Self::Database> + Send + 'async_trait>> where
'life0: 'async_trait,
Self: 'async_trait,
fn admin<'life0, 'async_trait>(
&'life0 self
) -> Pin<Box<dyn Future<Output = Self::Database> + Send + 'async_trait>> where
'life0: 'async_trait,
Self: 'async_trait,
Returns the currently authenticated session, if any.
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
'life0: 'async_trait,
'life1: 'async_trait,
Self: '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
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
Creates a database named name using the SchemaName schema. Read more
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,
'life0: 'async_trait,
'life1: 'async_trait,
Self: '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,
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
Returns a reference to database name with schema DB.
sourcefn delete_database<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>> where
'life0: 'async_trait,
'life1: 'async_trait,
Self: '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
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
Deletes a database named name. Read more
sourcefn list_databases<'life0, 'async_trait>(
&'life0 self
) -> Pin<Box<dyn Future<Output = Result<Vec<Database>, Error>> + Send + 'async_trait>> where
'life0: 'async_trait,
Self: 'async_trait,
fn list_databases<'life0, 'async_trait>(
&'life0 self
) -> Pin<Box<dyn Future<Output = Result<Vec<Database>, Error>> + Send + 'async_trait>> where
'life0: 'async_trait,
Self: 'async_trait,
Lists the databases in this storage.
sourcefn list_available_schemas<'life0, 'async_trait>(
&'life0 self
) -> Pin<Box<dyn Future<Output = Result<Vec<SchemaName>, Error>> + Send + 'async_trait>> where
'life0: 'async_trait,
Self: 'async_trait,
fn list_available_schemas<'life0, 'async_trait>(
&'life0 self
) -> Pin<Box<dyn Future<Output = Result<Vec<SchemaName>, Error>> + Send + 'async_trait>> where
'life0: 'async_trait,
Self: '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
'life0: 'async_trait,
'life1: 'async_trait,
Self: '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
'life0: 'async_trait,
'life1: 'async_trait,
Self: '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>> where
'user: 'async_trait,
U: 'async_trait + Nameable<'user, u64> + Send + Sync,
'life0: 'async_trait,
Self: '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
'user: 'async_trait,
U: 'async_trait + Nameable<'user, u64> + Send + Sync,
'life0: 'async_trait,
Self: '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>> where
'user: 'async_trait,
U: 'async_trait + Nameable<'user, u64> + Send + Sync,
'life0: 'async_trait,
Self: '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
'user: 'async_trait,
U: 'async_trait + Nameable<'user, u64> + Send + Sync,
'life0: 'async_trait,
Self: 'async_trait,
Sets a user’s password.
sourcefn authenticate<'user, 'life0, 'async_trait, U>(
&'life0 self,
user: U,
authentication: Authentication
) -> Pin<Box<dyn Future<Output = Result<Self::Authenticated, Error>> + Send + 'async_trait>> where
'user: 'async_trait,
U: 'async_trait + Nameable<'user, u64> + Send + Sync,
'life0: 'async_trait,
Self: 'async_trait,
fn authenticate<'user, 'life0, 'async_trait, U>(
&'life0 self,
user: U,
authentication: Authentication
) -> Pin<Box<dyn Future<Output = Result<Self::Authenticated, Error>> + Send + 'async_trait>> where
'user: 'async_trait,
U: 'async_trait + Nameable<'user, u64> + Send + Sync,
'life0: 'async_trait,
Self: 'async_trait,
Authenticates as a user with a authentication method.
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
'life0: 'async_trait,
'life1: 'async_trait,
Self: '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
'life0: 'async_trait,
'life1: 'async_trait,
Self: '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. Read more
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>> where
'user: 'async_trait,
'group: 'async_trait,
U: 'async_trait + Nameable<'user, u64> + Send + Sync,
G: 'async_trait + Nameable<'group, u64> + Send + Sync,
'life0: 'async_trait,
Self: '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
'user: 'async_trait,
'group: 'async_trait,
U: 'async_trait + Nameable<'user, u64> + Send + Sync,
G: 'async_trait + Nameable<'group, u64> + Send + Sync,
'life0: 'async_trait,
Self: '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>> where
'user: 'async_trait,
'group: 'async_trait,
U: 'async_trait + Nameable<'user, u64> + Send + Sync,
G: 'async_trait + Nameable<'group, u64> + Send + Sync,
'life0: 'async_trait,
Self: '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
'user: 'async_trait,
'group: 'async_trait,
U: 'async_trait + Nameable<'user, u64> + Send + Sync,
G: 'async_trait + Nameable<'group, u64> + Send + Sync,
'life0: 'async_trait,
Self: 'async_trait,
Removes a user from a permission group.
sourcefn add_role_to_user<'user, 'group, 'life0, 'async_trait, U, G>(
&'life0 self,
user: U,
role: G
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>> where
'user: 'async_trait,
'group: 'async_trait,
U: 'async_trait + Nameable<'user, u64> + Send + Sync,
G: 'async_trait + Nameable<'group, u64> + Send + Sync,
'life0: 'async_trait,
Self: 'async_trait,
fn add_role_to_user<'user, 'group, 'life0, 'async_trait, U, G>(
&'life0 self,
user: U,
role: G
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>> where
'user: 'async_trait,
'group: 'async_trait,
U: 'async_trait + Nameable<'user, u64> + Send + Sync,
G: 'async_trait + Nameable<'group, u64> + Send + Sync,
'life0: 'async_trait,
Self: 'async_trait,
Adds a user to a permission group.
sourcefn remove_role_from_user<'user, 'group, 'life0, 'async_trait, U, G>(
&'life0 self,
user: U,
role: G
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>> where
'user: 'async_trait,
'group: 'async_trait,
U: 'async_trait + Nameable<'user, u64> + Send + Sync,
G: 'async_trait + Nameable<'group, u64> + Send + Sync,
'life0: 'async_trait,
Self: 'async_trait,
fn remove_role_from_user<'user, 'group, 'life0, 'async_trait, U, G>(
&'life0 self,
user: U,
role: G
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>> where
'user: 'async_trait,
'group: 'async_trait,
U: 'async_trait + Nameable<'user, u64> + Send + Sync,
G: 'async_trait + Nameable<'group, u64> + Send + Sync,
'life0: 'async_trait,
Self: 'async_trait,
Removes a user from a permission group.
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, Global>> where
'life0: 'async_trait,
'life1: 'async_trait,
DB: 'async_trait + Schema,
Self: '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, Global>> where
'life0: 'async_trait,
'life1: 'async_trait,
DB: 'async_trait + Schema,
Self: 'async_trait,
Creates a database named name with the Schema provided. Read more
sourceimpl HasSession for Client
impl HasSession for Client
sourceimpl StorageConnection for Client
impl StorageConnection for Client
type Database = RemoteDatabase
type Database = RemoteDatabase
The type that represents a database for this implementation.
type Authenticated = Self
type Authenticated = Self
The StorageConnection type returned from authentication calls.
sourcefn database<DB: Schema>(&self, name: &str) -> Result<Self::Database, Error>
fn database<DB: Schema>(&self, name: &str) -> Result<Self::Database, Error>
Returns a reference to database name with schema DB.
sourcefn create_database_with_schema(
&self,
name: &str,
schema: SchemaName,
only_if_needed: bool
) -> Result<(), Error>
fn create_database_with_schema(
&self,
name: &str,
schema: SchemaName,
only_if_needed: bool
) -> Result<(), Error>
Creates a database named name using the SchemaName schema. Read more
sourcefn delete_database(&self, name: &str) -> Result<(), Error>
fn delete_database(&self, name: &str) -> Result<(), Error>
Deletes a database named name. Read more
sourcefn list_available_schemas(&self) -> Result<Vec<SchemaName>, Error>
fn list_available_schemas(&self) -> Result<Vec<SchemaName>, Error>
Lists the SchemaNames registered with this storage.
sourcefn delete_user<'user, U: Nameable<'user, u64> + Send + Sync>(
&self,
user: U
) -> Result<(), Error>
fn delete_user<'user, U: Nameable<'user, u64> + Send + Sync>(
&self,
user: U
) -> Result<(), Error>
Deletes a user.
sourcefn set_user_password<'user, U: Nameable<'user, u64> + Send + Sync>(
&self,
user: U,
password: SensitiveString
) -> Result<(), Error>
fn set_user_password<'user, U: Nameable<'user, u64> + Send + Sync>(
&self,
user: U,
password: SensitiveString
) -> Result<(), Error>
Sets a user’s password.
sourcefn authenticate<'user, U: Nameable<'user, u64> + Send + Sync>(
&self,
user: U,
authentication: Authentication
) -> Result<Self::Authenticated, Error>
fn authenticate<'user, U: Nameable<'user, u64> + Send + Sync>(
&self,
user: U,
authentication: Authentication
) -> Result<Self::Authenticated, Error>
Authenticates as a user with a authentication method.
sourcefn assume_identity(
&self,
identity: IdentityReference<'_>
) -> Result<Self::Authenticated, Error>
fn assume_identity(
&self,
identity: IdentityReference<'_>
) -> Result<Self::Authenticated, Error>
Assumes the identity. If successful, the returned instance will have
the merged permissions of the current authentication session and the
permissions from identity. Read more
sourcefn add_permission_group_to_user<'user, 'group, U: Nameable<'user, u64> + Send + Sync, G: Nameable<'group, u64> + Send + Sync>(
&self,
user: U,
permission_group: G
) -> Result<(), Error>
fn add_permission_group_to_user<'user, 'group, U: Nameable<'user, u64> + Send + Sync, G: Nameable<'group, u64> + Send + Sync>(
&self,
user: U,
permission_group: G
) -> Result<(), Error>
Adds a user to a permission group.
sourcefn remove_permission_group_from_user<'user, 'group, U: Nameable<'user, u64> + Send + Sync, G: Nameable<'group, u64> + Send + Sync>(
&self,
user: U,
permission_group: G
) -> Result<(), Error>
fn remove_permission_group_from_user<'user, 'group, U: Nameable<'user, u64> + Send + Sync, G: Nameable<'group, u64> + Send + Sync>(
&self,
user: U,
permission_group: G
) -> Result<(), Error>
Removes a user from a permission group.
sourcefn add_role_to_user<'user, 'role, U: Nameable<'user, u64> + Send + Sync, R: Nameable<'role, u64> + Send + Sync>(
&self,
user: U,
role: R
) -> Result<(), Error>
fn add_role_to_user<'user, 'role, U: Nameable<'user, u64> + Send + Sync, R: Nameable<'role, u64> + Send + Sync>(
&self,
user: U,
role: R
) -> Result<(), Error>
Adds a user to a permission group.
Auto Trait Implementations
impl !RefUnwindSafe for Client
impl Send for Client
impl Sync for Client
impl Unpin for Client
impl !UnwindSafe for Client
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into)Uses borrowed data to replace owned data, usually by cloning. Read more
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
fn vzip(self) -> V
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
Attaches the provided Subscriber to this type, returning a
WithDispatch wrapper. Read more
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber to this type, returning a
WithDispatch wrapper. Read more