pub struct DatabaseSessionService { /* private fields */ }Expand description
SQL database-backed session service.
Supports SQLite and (with postgres-sessions) PostgreSQL via connection
URL. The pool is opened lazily on first use and cached, so new stays
synchronous and cheap.
Implementations§
Source§impl DatabaseSessionService
impl DatabaseSessionService
Sourcepub fn new(connection_url: impl Into<String>) -> Self
pub fn new(connection_url: impl Into<String>) -> Self
Create a new database session service.
The connection URL determines the backend by scheme:
sqlite:/sqlite::memory:→ SQLitepostgres:/postgresql:→ PostgreSQL (requirespostgres-sessions)
This does not open a connection; the pool is created lazily on first
use (or eagerly via initialize).
Sourcepub fn with_max_connections(self, max: u32) -> Self
pub fn with_max_connections(self, max: u32) -> Self
Set the maximum number of pool connections (PostgreSQL only).
SQLite ignores this and always uses a single connection so that an in-memory database survives across calls.
Sourcepub fn connection_url(&self) -> &str
pub fn connection_url(&self) -> &str
Returns the connection URL this service was configured with.
Sourcepub async fn initialize(&self) -> Result<(), SessionError>
pub async fn initialize(&self) -> Result<(), SessionError>
Initialize the database: open the pool and create the schema.
Safe to call multiple times. Subsequent CRUD calls reuse the cached pool.
Trait Implementations§
Source§impl SessionService for DatabaseSessionService
impl SessionService for DatabaseSessionService
Source§fn create_session<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
app_name: &'life1 str,
user_id: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Session, SessionError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn create_session<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
app_name: &'life1 str,
user_id: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Session, SessionError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn get_session<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 SessionId,
) -> Pin<Box<dyn Future<Output = Result<Option<Session>, SessionError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_session<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 SessionId,
) -> Pin<Box<dyn Future<Output = Result<Option<Session>, SessionError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn list_sessions<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
app_name: &'life1 str,
user_id: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<Session>, SessionError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn list_sessions<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
app_name: &'life1 str,
user_id: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<Session>, SessionError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn delete_session<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 SessionId,
) -> Pin<Box<dyn Future<Output = Result<(), SessionError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete_session<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 SessionId,
) -> Pin<Box<dyn Future<Output = Result<(), SessionError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Auto Trait Implementations§
impl !Freeze for DatabaseSessionService
impl !RefUnwindSafe for DatabaseSessionService
impl Send for DatabaseSessionService
impl Sync for DatabaseSessionService
impl Unpin for DatabaseSessionService
impl !UnwindSafe for DatabaseSessionService
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].