Skip to main content

InMemoryRepository

Struct InMemoryRepository 

Source
pub struct InMemoryRepository<A>
where A: AggregateRoot,
{ /* private fields */ }
Expand description

A thread-safe, in-memory Repository implementation for tests.

Keys aggregates by their id (A::Id: Eq + Hash + Clone) and stores cloned state. On save it drains the aggregate’s pending events (as a real repository would, e.g. into an outbox) and records them for later inspection via drained_events.

Its Error is Infallible: nothing here can fail.

Implementations§

Source§

impl<A> InMemoryRepository<A>
where A: AggregateRoot, A::Id: Eq + Hash + Clone,

Source

pub fn new() -> Self

An empty repository.

Source

pub fn len(&self) -> usize

The number of stored aggregates.

Source

pub fn is_empty(&self) -> bool

Whether the repository holds no aggregates.

Source

pub fn contains(&self, id: &A::Id) -> bool

Whether an aggregate with id is stored.

Source

pub fn insert(&self, aggregate: A)

Insert (or replace) an aggregate’s state directly, without draining its events — a convenience for seeding fixtures.

Source

pub fn drained_events(&self) -> Vec<A::Event>

Remove and return all events captured from save calls so far.

Each save appends the aggregate’s drained events here, preserving order across saves. Calling this clears the buffer.

Source

pub fn drained_event_count(&self) -> usize

The number of events captured from save calls (without draining them).

Trait Implementations§

Source§

impl<A> Default for InMemoryRepository<A>
where A: AggregateRoot, A::Id: Eq + Hash + Clone,

Source§

fn default() -> Self

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

impl<A> Repository<A> for InMemoryRepository<A>
where A: AggregateRoot + Clone + Send + Sync, A::Id: Eq + Hash + Clone + Send + Sync, A::Event: Send,

Source§

type Error = Infallible

The error type the implementation reports.
Source§

fn find<'life0, 'life1, 'async_trait>( &'life0 self, id: &'life1 A::Id, ) -> Pin<Box<dyn Future<Output = Result<Option<A>, Infallible>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Load an aggregate by id, or None if it does not exist.
Source§

fn save<'life0, 'life1, 'async_trait>( &'life0 self, aggregate: &'life1 mut A, ) -> Pin<Box<dyn Future<Output = Result<(), Infallible>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Persist an aggregate. Takes &mut so the implementation may drain its events (e.g. into an outbox) as part of the save.
Source§

fn delete<'life0, 'life1, 'async_trait>( &'life0 self, id: &'life1 A::Id, ) -> Pin<Box<dyn Future<Output = Result<(), Infallible>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Delete an aggregate by id.

Auto Trait Implementations§

§

impl<A> !Freeze for InMemoryRepository<A>

§

impl<A> RefUnwindSafe for InMemoryRepository<A>

§

impl<A> Send for InMemoryRepository<A>
where <A as AggregateRoot>::Event: Send, <A as Entity>::Id: Send, A: Send,

§

impl<A> Sync for InMemoryRepository<A>
where <A as AggregateRoot>::Event: Send, <A as Entity>::Id: Send, A: Send,

§

impl<A> Unpin for InMemoryRepository<A>
where <A as AggregateRoot>::Event: Unpin, <A as Entity>::Id: Unpin, A: Unpin,

§

impl<A> UnsafeUnpin for InMemoryRepository<A>

§

impl<A> UnwindSafe for InMemoryRepository<A>

Blanket Implementations§

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

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

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

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
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more