diff --git a/Cargo.lock b/Cargo.lock index c6eecaf..3cee731 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -94,7 +94,7 @@ checksum = "f8175979259124331c1d7bf6586ee7e0da434155e4b2d48ec2c8386281d8df39" dependencies = [ "async-trait", "axum-core", - "bitflags", + "bitflags 1.3.2", "bytes", "futures-util", "http", @@ -145,6 +145,7 @@ dependencies = [ "config", "serde", "tokio", + "tower-http", ] [[package]] @@ -183,6 +184,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42" + [[package]] name = "block-buffer" version = "0.10.4" @@ -294,6 +301,12 @@ version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +[[package]] +name = "futures-sink" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" + [[package]] name = "futures-task" version = "0.3.28" @@ -376,6 +389,12 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "http-range-header" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" + [[package]] name = "httparse" version = "1.8.0" @@ -720,7 +739,7 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -730,7 +749,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a" dependencies = [ "base64", - "bitflags", + "bitflags 1.3.2", "serde", ] @@ -925,6 +944,19 @@ dependencies = [ "syn", ] +[[package]] +name = "tokio-util" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + [[package]] name = "toml" version = "0.5.11" @@ -950,6 +982,31 @@ dependencies = [ "tracing", ] +[[package]] +name = "tower-http" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ac8060a61f8758a61562f6fb53ba3cbe1ca906f001df2e53cccddcdbee91e7c" +dependencies = [ + "bitflags 2.3.3", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-range-header", + "httpdate", + "mime", + "mime_guess", + "percent-encoding", + "pin-project-lite", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "tower-layer" version = "0.3.2" diff --git a/Cargo.toml b/Cargo.toml index 20f0b5b..7207ada 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,3 +12,4 @@ serde = { version = "1.0.167", features = ["derive", "rc"] } tokio = { version = "1.29.1", features = ["full"] } anyhow = "1.0.71" askama = "0.12.0" +tower-http = { version = "0.4.2", features = ["fs"] } diff --git a/assets/three-dots-loader.svg b/assets/three-dots-loader.svg new file mode 100644 index 0000000..53ae8a9 --- /dev/null +++ b/assets/three-dots-loader.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + diff --git a/src/main.rs b/src/main.rs index 486fb0f..5849a11 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,6 +8,7 @@ use axum::{ }; use pages::counter::CounterState; use std::sync::Arc; +use tower_http::services::ServeDir; struct AppState { counter: Arc, @@ -23,6 +24,7 @@ fn router(state: AppState) -> Router { "/counter/increment", post(pages::counter::increment).with_state(state.counter), ) + .nest_service("/assets", ServeDir::new("assets")) } #[tokio::main] diff --git a/src/pages/counter.rs b/src/pages/counter.rs index f9742d8..12c6d69 100644 --- a/src/pages/counter.rs +++ b/src/pages/counter.rs @@ -4,7 +4,10 @@ use axum::{ extract::State, response::{Html, IntoResponse}, }; -use std::sync::{atomic::AtomicUsize, Arc}; +use std::{ + sync::{atomic::AtomicUsize, Arc}, + time::Duration, +}; pub struct CounterState(AtomicUsize); @@ -32,5 +35,8 @@ pub async fn increment(State(state): State>) -> impl IntoRespo let previous = state .0 .fetch_add(increment, std::sync::atomic::Ordering::Relaxed); + + tokio::time::sleep(Duration::from_secs(1)).await; + Html(format!("{}", previous + increment)) } diff --git a/templates/counter.html b/templates/counter.html index beffe9f..3263bf5 100644 --- a/templates/counter.html +++ b/templates/counter.html @@ -13,9 +13,12 @@
- +
+ +
{{ count }}