@@ -19,16 +19,20 @@ type BoxedError = Box<dyn std::error::Error + Send + Sync + 'static>;
1919/// The result returned by a handler.
2020pub type HandlerResult < T > = Result < T , BoxedError > ;
2121
22- /// A handler callback for a parsed value.
23- pub trait Handler < T > {
24- /// Consume the parsed value.
25- fn handle ( & self , value : & T ) -> impl Future < Output = HandlerResult < ( ) > > + Send ;
22+ /// A handler callback for a parsed value and its corresponding raw event.
23+ pub trait Handler < T , R >
24+ where R : Sync
25+ {
26+ /// Consume the parsed value together with the raw event.
27+ fn handle ( & self , value : & T , raw_event : & R ) -> impl Future < Output = HandlerResult < ( ) > > + Send ;
2628}
2729
28- impl < T : Handler < U > , U > Handler < U > for & T {
30+ impl < T : Handler < U , R > , U , R > Handler < U , R > for & T
31+ where R : Sync
32+ {
2933 #[ inline]
30- fn handle ( & self , value : & U ) -> impl Future < Output = HandlerResult < ( ) > > + Send {
31- <T as Handler < U > >:: handle ( self , value)
34+ fn handle ( & self , value : & U , raw_event : & R ) -> impl Future < Output = HandlerResult < ( ) > > + Send {
35+ <T as Handler < U , R > >:: handle ( self , value, raw_event )
3236 }
3337}
3438
@@ -145,7 +149,8 @@ impl<P, I> Pipeline<P, I>
145149where
146150 for < ' i > & ' i I : IntoIterator ,
147151 P : Parser ,
148- for < ' i > <& ' i I as IntoIterator >:: Item : Handler < P :: Output > ,
152+ P :: Input : Sync ,
153+ for < ' i > <& ' i I as IntoIterator >:: Item : Handler < P :: Output , P :: Input > ,
149154{
150155 /// Handle fn for `Pipeline`
151156 ///
@@ -167,7 +172,7 @@ where
167172 let errs = ( & self . 1 )
168173 . into_iter ( )
169174 . map ( |h| async move {
170- h. handle ( parsed)
175+ h. handle ( parsed, value )
171176 . instrument ( tracing:: info_span!( "vixen.handle" , ) )
172177 . await
173178 } )
@@ -209,7 +214,7 @@ where
209214 for < ' i > & ' i I : IntoIterator ,
210215 P :: Input : Sync ,
211216 P :: Output : Send + Sync ,
212- for < ' i > <& ' i I as IntoIterator >:: Item : Handler < P :: Output > + Send ,
217+ for < ' i > <& ' i I as IntoIterator >:: Item : Handler < P :: Output , P :: Input > + Send ,
213218{
214219 fn handle < ' h > (
215220 & ' h self ,
0 commit comments