@@ -169,27 +169,17 @@ impl TriggerExecutor for HttpTrigger {
169
169
let listen_addr = config. address ;
170
170
let tls = config. into_tls_config ( ) ;
171
171
172
- // Print startup messages
173
- let scheme = if tls. is_some ( ) { "https" } else { "http" } ;
174
- let base_url = format ! ( "{}://{:?}" , scheme, listen_addr) ;
175
- terminal:: step!( "\n Serving" , "{}" , base_url) ;
176
- log:: info!( "Serving {}" , base_url) ;
177
-
178
- println ! ( "Available Routes:" ) ;
179
- for ( route, component_id) in self . router . routes ( ) {
180
- println ! ( " {}: {}{}" , component_id, base_url, route) ;
181
- if let Some ( component) = self . engine . app ( ) . get_component ( component_id) {
182
- if let Some ( description) = component. get_metadata ( APP_DESCRIPTION_KEY ) ? {
183
- println ! ( " {}" , description) ;
184
- }
185
- }
186
- }
172
+ let listener = TcpListener :: bind ( listen_addr)
173
+ . await
174
+ . with_context ( || format ! ( "Unable to listen on {}" , listen_addr) ) ?;
187
175
176
+ let self_ = Arc :: new ( self ) ;
188
177
if let Some ( tls) = tls {
189
- self . serve_tls ( listen_addr , tls) . await ?
178
+ self_ . serve_tls ( listener , tls) . await ?
190
179
} else {
191
- self . serve ( listen_addr ) . await ?
180
+ self_ . serve ( listener ) . await ?
192
181
} ;
182
+
193
183
Ok ( ( ) )
194
184
}
195
185
@@ -365,7 +355,7 @@ impl HttpTrigger {
365
355
}
366
356
367
357
fn serve_connection < S : AsyncRead + AsyncWrite + Unpin + Send + ' static > (
368
- self_ : Arc < Self > ,
358
+ self : Arc < Self > ,
369
359
stream : S ,
370
360
addr : SocketAddr ,
371
361
) {
@@ -374,7 +364,7 @@ impl HttpTrigger {
374
364
. keep_alive ( true )
375
365
. serve_connection (
376
366
TokioIo :: new ( stream) ,
377
- service_fn ( move |request| self_ . clone ( ) . instrumented_service_fn ( addr, request) ) ,
367
+ service_fn ( move |request| self . clone ( ) . instrumented_service_fn ( addr, request) ) ,
378
368
)
379
369
. await
380
370
{
@@ -407,36 +397,44 @@ impl HttpTrigger {
407
397
. await
408
398
}
409
399
410
- async fn serve ( self , listen_addr : SocketAddr ) -> Result < ( ) > {
411
- let self_ = Arc :: new ( self ) ;
412
-
413
- let listener = TcpListener :: bind ( listen_addr)
414
- . await
415
- . with_context ( || format ! ( "Unable to listen on {}" , listen_addr) ) ?;
416
-
400
+ async fn serve ( self : Arc < Self > , listener : TcpListener ) -> Result < ( ) > {
401
+ self . print_startup_msgs ( "http" , & listener) ?;
417
402
loop {
418
403
let ( stream, addr) = listener. accept ( ) . await ?;
419
- Self :: serve_connection ( self_ . clone ( ) , stream, addr) ;
404
+ Self :: serve_connection ( self . clone ( ) , stream, addr) ;
420
405
}
421
406
}
422
407
423
- async fn serve_tls ( self , listen_addr : SocketAddr , tls : TlsConfig ) -> Result < ( ) > {
424
- let self_ = Arc :: new ( self ) ;
425
-
426
- let listener = TcpListener :: bind ( listen_addr)
427
- . await
428
- . with_context ( || format ! ( "Unable to listen on {}" , listen_addr) ) ?;
429
-
408
+ async fn serve_tls ( self : Arc < Self > , listener : TcpListener , tls : TlsConfig ) -> Result < ( ) > {
430
409
let acceptor = tls. server_config ( ) ?;
410
+ self . print_startup_msgs ( "https" , & listener) ?;
431
411
432
412
loop {
433
413
let ( stream, addr) = listener. accept ( ) . await ?;
434
414
match acceptor. accept ( stream) . await {
435
- Ok ( stream) => Self :: serve_connection ( self_ . clone ( ) , stream, addr) ,
415
+ Ok ( stream) => self . clone ( ) . serve_connection ( stream, addr) ,
436
416
Err ( err) => tracing:: error!( ?err, "Failed to start TLS session" ) ,
437
417
}
438
418
}
439
419
}
420
+
421
+ fn print_startup_msgs ( & self , scheme : & str , listener : & TcpListener ) -> Result < ( ) > {
422
+ let local_addr = listener. local_addr ( ) ?;
423
+ let base_url = format ! ( "{scheme}://{local_addr:?}" ) ;
424
+ terminal:: step!( "\n Serving" , "{}" , base_url) ;
425
+ log:: info!( "Serving {}" , base_url) ;
426
+
427
+ println ! ( "Available Routes:" ) ;
428
+ for ( route, component_id) in self . router . routes ( ) {
429
+ println ! ( " {}: {}{}" , component_id, base_url, route) ;
430
+ if let Some ( component) = self . engine . app ( ) . get_component ( component_id) {
431
+ if let Some ( description) = component. get_metadata ( APP_DESCRIPTION_KEY ) ? {
432
+ println ! ( " {}" , description) ;
433
+ }
434
+ }
435
+ }
436
+ Ok ( ( ) )
437
+ }
440
438
}
441
439
442
440
fn parse_listen_addr ( addr : & str ) -> anyhow:: Result < SocketAddr > {
0 commit comments