use log::trace;
use std::{
fmt::Debug,
marker::PhantomData,
};
use crate::{
commands::ICommand,
events::IEvent,
};
use super::i_query::IQuery;
#[derive(Debug, PartialEq, Clone)]
pub struct QueryContext<C: ICommand, E: IEvent, Q: IQuery<C, E>> {
pub aggregate_id: String,
pub version: i64,
pub payload: Q,
_phantom: PhantomData<(C, E)>,
}
impl<C: ICommand, E: IEvent, Q: IQuery<C, E>> QueryContext<C, E, Q> {
pub fn new(
aggregate_id: String,
version: i64,
payload: Q,
) -> Self {
let x = Self {
aggregate_id,
version,
payload,
_phantom: PhantomData,
};
trace!("Created new {:?}", x,);
x
}
}