@@ -84,130 +84,168 @@ pub async fn handle(ctx: &Context, host: &str, event: &Event) -> Vec<HandlerErro
8484 handle_command ( ctx, event, & config, body, & mut errors) . await ;
8585 }
8686
87- if let Ok ( config ) = & config {
88- if let Err ( e ) = check_commits :: handle ( ctx , host , event , & config) . await {
89- log :: error! (
90- "failed to process event {:?} with `check_commits` handler: {:?}" ,
91- event ,
92- e
93- ) ;
87+ let check_commits = async {
88+ if let Ok ( check_commits_config ) = & config {
89+ check_commits :: handle ( ctx , host , event , check_commits_config )
90+ . await
91+ . map_err ( |e| HandlerError :: Other ( e . context ( "check_commits handler failed" ) ) )
92+ } else {
93+ Ok ( ( ) )
9494 }
95- }
95+ } ;
9696
97- if let Err ( e) = project_goals:: handle ( ctx, event) . await {
98- log:: error!(
99- "failed to process event {:?} with `project_goals` handler: {:?}" ,
100- event,
101- e
102- ) ;
103- }
97+ let project_goals = async {
98+ project_goals:: handle ( ctx, event)
99+ . await
100+ . map_err ( |e| HandlerError :: Other ( e. context ( "project_goals handler failed" ) ) )
101+ } ;
104102
105- if let Err ( e) = notification:: handle ( ctx, event) . await {
106- log:: error!(
107- "failed to process event {:?} with notification handler: {:?}" ,
108- event,
109- e
110- ) ;
111- }
103+ let notification = async {
104+ notification:: handle ( ctx, event)
105+ . await
106+ . map_err ( |e| HandlerError :: Other ( e. context ( "notification handler failed" ) ) )
107+ } ;
112108
113- if let Err ( e) = rustc_commits:: handle ( ctx, event) . await {
114- log:: error!(
115- "failed to process event {:?} with rustc_commits handler: {:?}" ,
116- event,
117- e
118- ) ;
119- }
109+ let rustc_commits = async {
110+ rustc_commits:: handle ( ctx, event)
111+ . await
112+ . map_err ( |e| HandlerError :: Other ( e. context ( "rustc_commits handler failed" ) ) )
113+ } ;
120114
121- if let Err ( e) = milestone_prs:: handle ( ctx, event) . await {
122- log:: error!(
123- "failed to process event {:?} with milestone_prs handler: {:?}" ,
124- event,
125- e
126- ) ;
127- }
115+ let milestone_prs = async {
116+ milestone_prs:: handle ( ctx, event)
117+ . await
118+ . map_err ( |e| HandlerError :: Other ( e. context ( "milestone_prs handler failed" ) ) )
119+ } ;
128120
129- if let Some ( rendered_link_config) = config. as_ref ( ) . ok ( ) . and_then ( |c| c. rendered_link . as_ref ( ) )
130- {
131- if let Err ( e) = rendered_link:: handle ( ctx, event, rendered_link_config) . await {
132- log:: error!(
133- "failed to process event {:?} with rendered_link handler: {:?}" ,
134- event,
135- e
136- ) ;
121+ let rendered_link = async {
122+ if let Some ( rendered_link_config) =
123+ config. as_ref ( ) . ok ( ) . and_then ( |c| c. rendered_link . as_ref ( ) )
124+ {
125+ rendered_link:: handle ( ctx, event, rendered_link_config)
126+ . await
127+ . map_err ( |e| HandlerError :: Other ( e. context ( "rendered_link handler failed" ) ) )
128+ } else {
129+ Ok ( ( ) )
137130 }
138- }
131+ } ;
139132
140- if let Err ( e) = relnotes:: handle ( ctx, event) . await {
141- log:: error!(
142- "failed to process event {:?} with relnotes handler: {:?}" ,
143- event,
144- e
145- ) ;
146- }
133+ let relnotes = async {
134+ relnotes:: handle ( ctx, event)
135+ . await
136+ . map_err ( |e| HandlerError :: Other ( e. context ( "relnotes handler failed" ) ) )
137+ } ;
147138
148- if config . as_ref ( ) . is_ok_and ( |c| c . bot_pull_requests . is_some ( ) ) {
149- if let Err ( e ) = bot_pull_requests:: handle ( ctx , event ) . await {
150- log :: error! (
151- "failed to process event {:?} with bot_pull_requests handler: {:?}" ,
152- event ,
153- e
154- )
139+ let bot_pull_requests = async {
140+ if config . as_ref ( ) . is_ok_and ( |c| c . bot_pull_requests . is_some ( ) ) {
141+ bot_pull_requests :: handle ( ctx , event )
142+ . await
143+ . map_err ( |e| HandlerError :: Other ( e . context ( "bot_pull_requests handler failed" ) ) )
144+ } else {
145+ Ok ( ( ) )
155146 }
156- }
147+ } ;
157148
158- if let Some ( config ) = config
159- . as_ref ( )
160- . ok ( )
161- . and_then ( |c| c . review_submitted . as_ref ( ) )
162- {
163- if let Err ( e ) = review_submitted :: handle ( ctx , event , config ) . await {
164- log :: error! (
165- "failed to process event {:?} with review_submitted handler: {:?}" ,
166- event ,
167- e
168- )
149+ let review_submitted = async {
150+ if let Some ( review_submitted_config ) = config
151+ . as_ref ( )
152+ . ok ( )
153+ . and_then ( |c| c . review_submitted . as_ref ( ) )
154+ {
155+ review_submitted :: handle ( ctx , event , review_submitted_config )
156+ . await
157+ . map_err ( |e| HandlerError :: Other ( e . context ( "review_submitted handler failed" ) ) )
158+ } else {
159+ Ok ( ( ) )
169160 }
170- }
161+ } ;
171162
172- if let Some ( config ) = config
173- . as_ref ( )
174- . ok ( )
175- . and_then ( |c| c . review_changes_since . as_ref ( ) )
176- {
177- if let Err ( e ) = review_changes_since :: handle ( ctx , host , event , config ) . await {
178- log :: error! (
179- "failed to process event {:?} with review_changes_since handler: {:?}" ,
180- event ,
181- e
182- )
163+ let review_changes_since = async {
164+ if let Some ( review_changes_since_config ) = config
165+ . as_ref ( )
166+ . ok ( )
167+ . and_then ( |c| c . review_changes_since . as_ref ( ) )
168+ {
169+ review_changes_since :: handle ( ctx , host , event , review_changes_since_config )
170+ . await
171+ . map_err ( |e| HandlerError :: Other ( e . context ( "review_changes_since handler failed" ) ) )
172+ } else {
173+ Ok ( ( ) )
183174 }
184- }
175+ } ;
185176
186- if let Some ( ghr_config ) = config
187- . as_ref ( )
188- . ok ( )
189- . and_then ( |c| c . github_releases . as_ref ( ) )
190- {
191- if let Err ( e ) = github_releases :: handle ( ctx , event , ghr_config ) . await {
192- log :: error! (
193- "failed to process event {:?} with github_releases handler: {:?}" ,
194- event ,
195- e
196- ) ;
177+ let github_releases = async {
178+ if let Some ( github_releases_config ) = config
179+ . as_ref ( )
180+ . ok ( )
181+ . and_then ( |c| c . github_releases . as_ref ( ) )
182+ {
183+ github_releases :: handle ( ctx , event , github_releases_config )
184+ . await
185+ . map_err ( |e| HandlerError :: Other ( e . context ( "github_releases handler failed" ) ) )
186+ } else {
187+ Ok ( ( ) )
197188 }
198- }
189+ } ;
199190
200- if let Some ( conflict_config) = config
201- . as_ref ( )
202- . ok ( )
203- . and_then ( |c| c. merge_conflicts . as_ref ( ) )
204- {
205- if let Err ( e) = merge_conflicts:: handle ( ctx, event, conflict_config) . await {
206- log:: error!(
207- "failed to process event {:?} with merge_conflicts handler: {:?}" ,
208- event,
209- e
210- ) ;
191+ let merge_conflicts = async {
192+ if let Some ( merge_conflicts_config) = config
193+ . as_ref ( )
194+ . ok ( )
195+ . and_then ( |c| c. merge_conflicts . as_ref ( ) )
196+ {
197+ merge_conflicts:: handle ( ctx, event, merge_conflicts_config)
198+ . await
199+ . map_err ( |e| HandlerError :: Other ( e. context ( "merge_conflicts handler failed" ) ) )
200+ } else {
201+ Ok ( ( ) )
202+ }
203+ } ;
204+
205+ let (
206+ check_commits,
207+ project_goals,
208+ notification,
209+ rustc_commits,
210+ milestone_prs,
211+ rendered_link,
212+ relnotes,
213+ bot_pull_requests,
214+ review_submitted,
215+ review_changes_since,
216+ github_releases,
217+ merge_conflicts,
218+ ) = futures:: join!(
219+ check_commits,
220+ project_goals,
221+ notification,
222+ rustc_commits,
223+ milestone_prs,
224+ rendered_link,
225+ relnotes,
226+ bot_pull_requests,
227+ review_submitted,
228+ review_changes_since,
229+ github_releases,
230+ merge_conflicts,
231+ ) ;
232+
233+ for result in [
234+ check_commits,
235+ project_goals,
236+ notification,
237+ rustc_commits,
238+ milestone_prs,
239+ rendered_link,
240+ relnotes,
241+ bot_pull_requests,
242+ review_submitted,
243+ review_changes_since,
244+ github_releases,
245+ merge_conflicts,
246+ ] {
247+ if let Err ( e) = result {
248+ errors. push ( e) ;
211249 }
212250 }
213251
0 commit comments