use crate::prelude::*;
pub struct MessageBusEngine<D: MessageBusDriver> {
pub driver: D,
pub broker: D::Broker,
pub projector: D::Projector,
pub handler: D::Handler,
pub policy: D::Policy,
pub viewer: D::Viewer,
pub policy_context_factory: <D::PolicyContext as PolicyContext>::Factory,
pub uow_factory: <D::UnitOfWork as UnitOfWork>::Factory,
}
impl<D: MessageBusDriver> Clone for MessageBusEngine<D> {
fn clone(&self) -> Self {
Self {
driver: self.driver.clone(),
broker: self.broker.clone(),
projector: self.projector.clone(),
handler: self.handler.clone(),
policy: self.policy.clone(),
viewer: self.viewer.clone(),
policy_context_factory: self.policy_context_factory.clone(),
uow_factory: self.uow_factory.clone(),
}
}
}
impl<D: MessageBusDriver> From<&D> for MessageBusEngine<D>
where
D::Broker: for<'a> From<&'a D>,
D::Projector: for<'a> From<&'a D>,
D::Handler: for<'a> From<&'a D>,
D::Policy: for<'a> From<&'a D>,
D::Viewer: for<'a> From<&'a D>,
<D::UnitOfWork as UnitOfWork>::Factory: for<'a> From<&'a D>,
<D::PolicyContext as PolicyContext>::Factory: for<'a> From<&'a D>,
{
fn from(driver: &D) -> Self {
Self {
driver: driver.clone(),
broker: From::from(driver),
projector: From::from(driver),
handler: From::from(driver),
policy: From::from(driver),
viewer: From::from(driver),
policy_context_factory: From::from(driver),
uow_factory: From::from(driver),
}
}
}