@@ -18,30 +18,32 @@ use rumqttc::v5::{Event, Incoming};
1818use crate :: transport:: mqtt:: topic:: Topic ;
1919use std:: any:: { type_name, Any } ;
2020use std:: str:: from_utf8;
21+ use crate :: transport:: packet:: Packet ;
22+ use crate :: transport:: payload:: Payload ;
2123
22- pub type BoxedReception = ( Box < dyn Any + ' static + Send > , PublishProperties ) ;
24+ // pub type BoxedReception = (Box<dyn Any + 'static + Send>, PublishProperties);
2325
24- type BoxedCallback = Box < dyn Fn ( Publish ) -> Option < BoxedReception > > ;
26+ // type BoxedCallback = Box<dyn Fn(Publish) -> Option<Packet<dyn Topic, dyn Payload> >>;
2527
2628#[ cfg( feature = "telemetry" ) ]
2729use crate :: transport:: telemetry:: get_reception_mqtt_span;
2830
2931#[ derive( Default ) ]
30- pub struct MqttRouter {
31- route_map : HashMap < String , BoxedCallback > ,
32+ pub struct MqttRouter < T : Topic > {
33+ route_map : HashMap < String , Box < dyn Fn ( Publish ) -> Option < Packet < T , dyn Any + Send + ' static > > > > ,
3234}
3335
34- impl MqttRouter {
35- pub fn add_route < T , C > ( & mut self , topic : T , callback : C )
36+ impl < T > MqttRouter < T > {
37+ pub fn add_route < P , C > ( & mut self , topic : T , callback : C )
3638 where
37- T : Topic ,
38- C : Fn ( Publish ) -> Option < BoxedReception > + ' static ,
39+ P : Payload ,
40+ C : Fn ( Publish ) -> Option < Packet < T , P > > + ' static ,
3941 {
4042 self . route_map . insert ( topic. as_route ( ) , Box :: new ( callback) ) ;
4143 info ! ( "Registered route for topic: {}" , topic. as_route( ) ) ;
4244 }
4345
44- pub fn handle_event < T : Topic > ( & mut self , event : Event ) -> Option < ( T , BoxedReception ) > {
46+ pub fn handle_event < P : Payload > ( & mut self , event : Event ) -> Option < Packet < T , P > > {
4547 match event {
4648 Event :: Incoming ( incoming) => match incoming {
4749 Incoming :: Publish ( publish) => {
0 commit comments