Skip to content

Commit 02c1d18

Browse files
committed
trigger-http: Dedupe logic between HttpTrigger::serve/serve_tls
Signed-off-by: Lann Martin <[email protected]>
1 parent 62b2911 commit 02c1d18

File tree

1 file changed

+29
-48
lines changed

1 file changed

+29
-48
lines changed

crates/trigger-http/src/lib.rs

Lines changed: 29 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -169,10 +169,15 @@ impl TriggerExecutor for HttpTrigger {
169169
let listen_addr = config.address;
170170
let tls = config.into_tls_config();
171171

172+
let listener = TcpListener::bind(listen_addr)
173+
.await
174+
.with_context(|| format!("Unable to listen on {}", listen_addr))?;
175+
176+
let self_ = Arc::new(self);
172177
if let Some(tls) = tls {
173-
self.serve_tls(listen_addr, tls).await?
178+
self_.serve_tls(listener, tls).await?
174179
} else {
175-
self.serve(listen_addr).await?
180+
self_.serve(listener).await?
176181
};
177182

178183
Ok(())
@@ -350,7 +355,7 @@ impl HttpTrigger {
350355
}
351356

352357
fn serve_connection<S: AsyncRead + AsyncWrite + Unpin + Send + 'static>(
353-
self_: Arc<Self>,
358+
self: Arc<Self>,
354359
stream: S,
355360
addr: SocketAddr,
356361
) {
@@ -359,7 +364,7 @@ impl HttpTrigger {
359364
.keep_alive(true)
360365
.serve_connection(
361366
TokioIo::new(stream),
362-
service_fn(move |request| self_.clone().instrumented_service_fn(addr, request)),
367+
service_fn(move |request| self.clone().instrumented_service_fn(addr, request)),
363368
)
364369
.await
365370
{
@@ -392,67 +397,43 @@ impl HttpTrigger {
392397
.await
393398
}
394399

395-
async fn serve(self, listen_addr: SocketAddr) -> Result<()> {
396-
let self_ = Arc::new(self);
397-
398-
let listener = TcpListener::bind(listen_addr)
399-
.await
400-
.with_context(|| format!("Unable to listen on {}", listen_addr))?;
401-
402-
// Print startup messages
403-
let scheme = "http";
404-
let base_url = format!("{}://{:?}", scheme, listener.local_addr()?);
405-
terminal::step!("\nServing", "{}", base_url);
406-
log::info!("Serving {}", base_url);
407-
408-
println!("Available Routes:");
409-
for (route, component_id) in self_.router.routes() {
410-
println!(" {}: {}{}", component_id, base_url, route);
411-
if let Some(component) = self_.engine.app().get_component(component_id) {
412-
if let Some(description) = component.get_metadata(APP_DESCRIPTION_KEY)? {
413-
println!(" {}", description);
414-
}
415-
}
416-
}
417-
400+
async fn serve(self: Arc<Self>, listener: TcpListener) -> Result<()> {
401+
self.print_startup_msgs("http", &listener)?;
418402
loop {
419403
let (stream, addr) = listener.accept().await?;
420-
Self::serve_connection(self_.clone(), stream, addr);
404+
Self::serve_connection(self.clone(), stream, addr);
421405
}
422406
}
423407

424-
async fn serve_tls(self, listen_addr: SocketAddr, tls: TlsConfig) -> Result<()> {
425-
let self_ = Arc::new(self);
408+
async fn serve_tls(self: Arc<Self>, listener: TcpListener, tls: TlsConfig) -> Result<()> {
409+
let acceptor = tls.server_config()?;
410+
self.print_startup_msgs("https", &listener)?;
426411

427-
let listener = TcpListener::bind(listen_addr)
428-
.await
429-
.with_context(|| format!("Unable to listen on {}", listen_addr))?;
412+
loop {
413+
let (stream, addr) = listener.accept().await?;
414+
match acceptor.accept(stream).await {
415+
Ok(stream) => self.clone().serve_connection(stream, addr),
416+
Err(err) => tracing::error!(?err, "Failed to start TLS session"),
417+
}
418+
}
419+
}
430420

431-
// Print startup messages
432-
let scheme = "https";
433-
let base_url = format!("{}://{:?}", scheme, listener.local_addr()?);
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:?}");
434424
terminal::step!("\nServing", "{}", base_url);
435425
log::info!("Serving {}", base_url);
436426

437427
println!("Available Routes:");
438-
for (route, component_id) in self_.router.routes() {
428+
for (route, component_id) in self.router.routes() {
439429
println!(" {}: {}{}", component_id, base_url, route);
440-
if let Some(component) = self_.engine.app().get_component(component_id) {
430+
if let Some(component) = self.engine.app().get_component(component_id) {
441431
if let Some(description) = component.get_metadata(APP_DESCRIPTION_KEY)? {
442432
println!(" {}", description);
443433
}
444434
}
445435
}
446-
447-
let acceptor = tls.server_config()?;
448-
449-
loop {
450-
let (stream, addr) = listener.accept().await?;
451-
match acceptor.accept(stream).await {
452-
Ok(stream) => Self::serve_connection(self_.clone(), stream, addr),
453-
Err(err) => tracing::error!(?err, "Failed to start TLS session"),
454-
}
455-
}
436+
Ok(())
456437
}
457438
}
458439

0 commit comments

Comments
 (0)