Skip to main content

InMemoryLockManager

Struct InMemoryLockManager 

Source
pub struct InMemoryLockManager { /* private fields */ }
Expand description

In-memory LockManager backed by a HashMap<String, Arc<InMemoryLock>>.

Lazily creates one InMemoryLock per unique key and returns the same Arc for repeated lookups. An entry is evicted on unlock once it is idle and no handle beyond the map’s own remains, so the map does not grow unboundedly with every aggregate id ever locked.

Implementations§

Trait Implementations§

Source§

impl Default for InMemoryLockManager

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl LockManager for InMemoryLockManager

Source§

fn get_lock(&self, id: &str) -> Result<Arc<InMemoryLock>, LockError>

Get (or create) the lock for id.

The returned handle is good for one acquire/release cycle: unlocking may evict the idle entry, so do not cache the handle across an unlock — call get_lock again (as QueuedRepository does per operation).

Source§

type Lock = InMemoryLock

The concrete lock type returned by this manager.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> AggregateBuilder for T

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Queueable for T

Source§

fn queued(self) -> QueuedRepository<Self, InMemoryLockManager>

Wrap with the default async lock manager. Pair with .aggregate::<T>() for per-aggregate serialization over the async repository surface.
Source§

fn queued_with<L: LockManager>( self, lock_manager: L, ) -> QueuedRepository<Self, L>

Wrap with a custom async lock manager.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.