@@ -11,7 +11,7 @@ pub enum ShardRestartResult {
1111}
1212
1313impl ShardRestartResult {
14- pub fn is_forced ( & self ) -> bool {
14+ pub fn is_forced ( self ) -> bool {
1515 matches ! ( self , Self :: ForcedRestart )
1616 }
1717}
@@ -90,24 +90,12 @@ impl State {
9090 }
9191}
9292
93- pub struct Dispatcher < ' a > {
94- #[ allow( dead_code) ]
95- pub shard : & ' a mut Shard ,
96- tracker : & ' a TaskTracker ,
97- }
98-
99- impl < ' a > Dispatcher < ' a > {
100- fn new ( shard : & ' a mut Shard , tracker : & ' a TaskTracker ) -> Self {
101- Self { shard, tracker }
102- }
103-
104- pub fn dispatch ( self , future : impl Future < Output = ( ) > + Send + ' static ) {
105- self . tracker . spawn ( future) ;
106- }
107- }
108-
10993#[ tracing:: instrument( name = "dispatcher" , fields( shard. id = shard. id( ) . number( ) ) , skip_all) ]
110- pub async fn run ( mut shard : Shard , mut event_handler : impl FnMut ( Dispatcher , Event ) ) -> ResumeInfo {
94+ pub async fn run < H , Fut > ( mut shard : Shard , mut event_handler : H ) -> ResumeInfo
95+ where
96+ H : FnMut ( Event , & mut Shard ) -> Fut ,
97+ Fut : Future < Output = ( ) > + Send + ' static ,
98+ {
11199 let mut receiver = ShardHandle :: insert ( shard. id ( ) ) ;
112100 let mut shutdown = pin ! ( signal:: ctrl_c( ) ) ;
113101 let tracker = TaskTracker :: new ( ) ;
@@ -132,11 +120,8 @@ pub async fn run(mut shard: Shard, mut event_handler: impl FnMut(Dispatcher, Eve
132120 event = shard. next_event( EVENT_TYPES ) => {
133121 match event {
134122 Some ( Ok ( Event :: GatewayClose ( _) ) ) if !state. is_active( ) => break ,
135- Some ( Ok ( event) ) => event_handler( Dispatcher :: new( & mut shard, & tracker) , event) ,
136- Some ( Err ( error) ) => {
137- tracing:: warn!( error = & error as & dyn Error , "shard failed to receive an event" ) ;
138- continue ;
139- }
123+ Some ( Ok ( event) ) => _ = tracker. spawn( event_handler( event, & mut shard) ) ,
124+ Some ( Err ( error) ) => tracing:: warn!( error = & error as & dyn Error , "shard failed to receive an event" ) ,
140125 None => break ,
141126 }
142127 }
0 commit comments