From fb2dd9018164e85bc252c04c6a137b6dc1e752ef Mon Sep 17 00:00:00 2001 From: Mariano Riefolo Date: Mon, 12 Aug 2024 12:25:18 +0200 Subject: [PATCH] feat(axum): serve scripts folder --- Cargo.lock | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 1 + src/main.rs | 5 +++- 3 files changed, 75 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 150e958..3d06d57 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -366,6 +366,12 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + [[package]] name = "futures-task" version = "0.3.30" @@ -471,6 +477,12 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "http-range-header" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08a397c49fec283e3d6211adbe480be95aae5f304cfb923e9970e08956d5168a" + [[package]] name = "httparse" version = "1.9.4" @@ -636,6 +648,16 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + [[package]] name = "miniz_oxide" version = "0.7.4" @@ -986,6 +1008,7 @@ dependencies = [ "serde", "serde_json", "tokio", + "tower-http", "validator", ] @@ -1226,6 +1249,19 @@ dependencies = [ "syn 2.0.72", ] +[[package]] +name = "tokio-util" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + [[package]] name = "tower" version = "0.4.13" @@ -1242,6 +1278,31 @@ dependencies = [ "tracing", ] +[[package]] +name = "tower-http" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" +dependencies = [ + "bitflags", + "bytes", + "futures-util", + "http", + "http-body", + "http-body-util", + "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" @@ -1280,6 +1341,15 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + [[package]] name = "unicode-bidi" version = "0.3.15" diff --git a/Cargo.toml b/Cargo.toml index 636bb96..2dd145a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,4 +14,5 @@ rusqlite = "0.32.1" serde = { version = "1.0.206", features = ["derive"] } serde_json = "1.0.122" tokio = { version = "1.39.2", features = ["full"] } +tower-http = { version = "0.5.2", features = ["fs"] } validator = { version = "0.18.1", features = ["derive"] } diff --git a/src/main.rs b/src/main.rs index 9cda5ed..27b2fe8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,7 @@ use std::net::SocketAddr; use axum::Router; use rusqlite::Connection; +use tower_http::services::ServeDir; mod api; mod db; @@ -14,7 +15,9 @@ async fn main() { dotenvy::dotenv().ok(); - let app = Router::new().merge(api::get_routes()); + let app = Router::new() + .merge(api::get_routes()) + .nest_service("/scripts", ServeDir::new("scripts")); let port = std::env::var("PORT") .unwrap_or_else(|_| "3000".to_string())