diff --git a/Cargo.lock b/Cargo.lock index 267978c..61ce1c2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2814,6 +2814,7 @@ dependencies = [ "sqlx", "thiserror 2.0.19", "tokio", + "tower-livereload", "urlencoding", ] @@ -3112,6 +3113,20 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" +[[package]] +name = "tower-livereload" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7df210bd982165dee3c20e31deed79a3585ee6b255c070d9c73ae015cc40d2f3" +dependencies = [ + "bytes", + "http", + "http-body", + "pin-project-lite", + "tokio", + "tower", +] + [[package]] name = "tower-service" version = "0.3.3" diff --git a/Cargo.toml b/Cargo.toml index a38e912..9e34581 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,3 +39,4 @@ reqwest-middleware = "0.4" reqwest-chain = "1.0" urlencoding = "2.1" clap = { version = "4.6.6", default-features = false, features = ["std", "derive", "help", "usage", "error-context"] } +tower-livereload = "0.10" diff --git a/src/main.rs b/src/main.rs index e4eb528..e50c11e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -29,9 +29,13 @@ async fn main() { .route("/hello", post(hello)) .with_state(state); - let listener = tokio::net::TcpListener::bind(listen) - .await - .unwrap(); + // Reload the page on server restart. + #[cfg(debug_assertions)] + let app = app.layer(tower_livereload::LiveReloadLayer::new().request_predicate( + |req: &axum::extract::Request| !req.headers().contains_key("hx-request"), + )); + + let listener = tokio::net::TcpListener::bind(listen).await.unwrap(); println!("listening on http://{}", listener.local_addr().unwrap()); axum::serve(listener, app).await.unwrap(); }