pub struct MemoryUserTokenStore { /* private fields */ }Expand description
In-memory UserTokenStore for tests and single-node bootstrapping.
Cheap to clone — shares one backing map.
Implementations§
Trait Implementations§
Source§impl Clone for MemoryUserTokenStore
impl Clone for MemoryUserTokenStore
Source§impl Default for MemoryUserTokenStore
impl Default for MemoryUserTokenStore
Source§impl UserTokenStore for MemoryUserTokenStore
impl UserTokenStore for MemoryUserTokenStore
Source§fn insert<'life0, 'life1, 'async_trait>(
&'life0 self,
record: &'life1 UserTokenRecord,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn insert<'life0, 'life1, 'async_trait>(
&'life0 self,
record: &'life1 UserTokenRecord,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Record a freshly minted token. The
jti is unique by construction
(fresh per mint); an impl MAY reject a duplicate with
StoreError::Conflict-shaped semantics but is not required to check.Source§fn list_live_for_user<'life0, 'life1, 'async_trait>(
&'life0 self,
user_id: &'life1 UserId,
now: i64,
) -> Pin<Box<dyn Future<Output = Result<Vec<UserTokenRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list_live_for_user<'life0, 'life1, 'async_trait>(
&'life0 self,
user_id: &'life1 UserId,
now: i64,
) -> Pin<Box<dyn Future<Output = Result<Vec<UserTokenRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Every live token the user holds at
now — impls filter out revoked
and expired rows, the same contract
SessionDirectory carries for sessions.
Order is unspecified.Source§fn get<'life0, 'life1, 'async_trait>(
&'life0 self,
jti: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<UserTokenRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get<'life0, 'life1, 'async_trait>(
&'life0 self,
jti: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<UserTokenRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
One row by
jti, revoked or expired rows included — the revoke path
needs to distinguish “not yours” from “already dead”, and only the
caller of this decides which of those the client gets told.Source§fn mark_revoked<'life0, 'life1, 'async_trait>(
&'life0 self,
jti: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn mark_revoked<'life0, 'life1, 'async_trait>(
&'life0 self,
jti: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Flip
revoked. Idempotent: revoking an already-revoked row is Ok.
A jti with no row is StoreError::NotFound.Source§fn touch_last_used<'life0, 'life1, 'async_trait>(
&'life0 self,
jti: &'life1 str,
now: i64,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn touch_last_used<'life0, 'life1, 'async_trait>(
&'life0 self,
jti: &'life1 str,
now: i64,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Stamp
last_used_at. Called by a resource server, never by cheers —
see the module docs. A jti with no row is StoreError::NotFound.Auto Trait Implementations§
impl Freeze for MemoryUserTokenStore
impl RefUnwindSafe for MemoryUserTokenStore
impl Send for MemoryUserTokenStore
impl Sync for MemoryUserTokenStore
impl Unpin for MemoryUserTokenStore
impl UnsafeUnpin for MemoryUserTokenStore
impl UnwindSafe for MemoryUserTokenStore
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
Mutably borrows from an owned value. Read more