use std::marker::PhantomData;
use crate::{
commands::{
ICommand,
ICommandHandler,
},
events::{
IEvent,
IEventHandler,
},
};
use super::handler_test_executor::HandlerResultExecutor;
pub struct HandlerTester<
C: ICommand,
E: IEvent,
A: Default + ICommandHandler<C, E> + IEventHandler<E>,
> {
_phantom: PhantomData<(C, E, A)>,
}
impl<
C: ICommand,
E: IEvent,
A: Default + ICommandHandler<C, E> + IEventHandler<E>,
> HandlerTester<C, E, A>
{
#[must_use]
pub fn given_no_previous_events(
&self
) -> HandlerResultExecutor<C, E, A> {
HandlerResultExecutor::new(Vec::new())
}
#[must_use]
pub fn given(
&self,
events: Vec<E>,
) -> HandlerResultExecutor<C, E, A> {
HandlerResultExecutor::new(events)
}
}
impl<
C: ICommand,
E: IEvent,
A: Default + ICommandHandler<C, E> + IEventHandler<E>,
> Default for HandlerTester<C, E, A>
{
fn default() -> Self {
HandlerTester {
_phantom: PhantomData,
}
}
}