roopes_core/aggregates/transforming_handler/
mod.rs1#[cfg(test)]
4mod tests;
5
6use crate::prelude::*;
7use std::marker::PhantomData;
8
9pub struct TransformingHandler<T, H, TI, HI>
12where
13 T: Transformer<TI, HI>,
14 H: Handler<HI>,
15{
16 transformer: T,
17 handler: H,
18 _phantom_data: PhantomData<(TI, HI)>,
19}
20
21impl<T, H, TI, HI> TransformingHandler<T, H, TI, HI>
22where
23 T: Transformer<TI, HI>,
24 H: Handler<HI>,
25{
26 pub fn new(
29 transformer: T,
30 handler: H,
31 ) -> Self
32 {
33 TransformingHandler {
34 transformer,
35 handler,
36 _phantom_data: PhantomData,
37 }
38 }
39}
40
41impl<T, H, TI, HI> From<(T, H)> for TransformingHandler<T, H, TI, HI>
42where
43 T: Transformer<TI, HI>,
44 H: Handler<HI>,
45{
46 fn from(value: (T, H)) -> Self
47 {
48 TransformingHandler::new(value.0, value.1)
49 }
50}
51
52impl<T, H, TI, HI> Handler<TI> for TransformingHandler<T, H, TI, HI>
53where
54 T: Transformer<TI, HI>,
55 H: Handler<HI>,
56{
57 fn handle(
58 &self,
59 message: &TI,
60 )
61 {
62 let result = self.transformer.transform(message);
63 self.handler.handle(&result);
64 }
65}
66
67pub mod prelude
69{
70 pub use super::TransformingHandler;
71}