pub struct InMemoryStore<A>where
A: AggregateRoot,{ /* private fields */ }Expand description
A Load/Save/Delete implementation backed by an in-memory
HashMap, with last-write-wins semantics (see Save’s docs for what
that means for PortErrorKind::Conflict).
§Examples
See Save for a worked example of saving and loading
through an InMemoryStore. The example below covers the store’s own
inspection methods, useful for asserting on what a use case persisted.
use ddd_toolkit_core::domain::{AggregateRoot, DomainEvent, Entity, EntityId, ValueObject};
use ddd_toolkit_core::mock::repository::InMemoryStore;
use ddd_toolkit_core::port::repository::Save;
use std::fmt::Display;
let store = InMemoryStore::new();
assert!(store.is_empty());
let mut order = Order { id: OrderId(1), events: vec![OrderPlaced] };
block_on(store.save(&mut order))?;
assert_eq!(store.len(), 1);
// events recorded across every save() call so far, for asserting a use
// case published what it was supposed to
assert_eq!(store.take_recorded_events(), vec![OrderPlaced]);
assert_eq!(store.take_recorded_events(), vec![]); // drainedImplementations§
Source§impl<A> InMemoryStore<A>where
A: AggregateRoot,
impl<A> InMemoryStore<A>where
A: AggregateRoot,
Sourcepub fn new() -> InMemoryStore<A>
pub fn new() -> InMemoryStore<A>
Creates a new, empty store.
Sourcepub fn take_recorded_events(&self) -> Vec<<A as AggregateRoot>::Event>
pub fn take_recorded_events(&self) -> Vec<<A as AggregateRoot>::Event>
Returns and clears every event recorded by a save call so far.
Trait Implementations§
Source§impl<A> Debug for InMemoryStore<A>where
A: Debug + AggregateRoot,
impl<A> Debug for InMemoryStore<A>where
A: Debug + AggregateRoot,
Source§impl<A> Default for InMemoryStore<A>where
A: AggregateRoot,
impl<A> Default for InMemoryStore<A>where
A: AggregateRoot,
Source§fn default() -> InMemoryStore<A>
fn default() -> InMemoryStore<A>
Returns the “default value” for a type. Read more
Source§impl<A> Delete<A> for InMemoryStore<A>where
A: AggregateRoot + Clone,
impl<A> Delete<A> for InMemoryStore<A>where
A: AggregateRoot + Clone,
Source§impl<A> Load<A> for InMemoryStore<A>where
A: AggregateRoot + Clone,
impl<A> Load<A> for InMemoryStore<A>where
A: AggregateRoot + Clone,
Source§impl<A> Save<A> for InMemoryStore<A>where
A: AggregateRoot + Clone,
impl<A> Save<A> for InMemoryStore<A>where
A: AggregateRoot + Clone,
Auto Trait Implementations§
impl<A> !Freeze for InMemoryStore<A>
impl<A> RefUnwindSafe for InMemoryStore<A>
impl<A> Send for InMemoryStore<A>
impl<A> Sync for InMemoryStore<A>
impl<A> Unpin for InMemoryStore<A>
impl<A> UnsafeUnpin for InMemoryStore<A>
impl<A> UnwindSafe for InMemoryStore<A>
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