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 @@
-