lib now has custom routes

This commit is contained in:
2025-12-08 21:27:02 +01:00
parent 27643959ea
commit 9d70fb07e4
5 changed files with 31 additions and 20 deletions
Generated
+13 -13
View File
@@ -225,9 +225,9 @@ checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3"
[[package]] [[package]]
name = "cc" name = "cc"
version = "1.2.48" version = "1.2.49"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c481bdbf0ed3b892f6f806287d72acd515b352a4ec27a208489b8c1bc839633a" checksum = "90583009037521a116abf44494efecd645ba48b6622457080f080b85544e2215"
dependencies = [ dependencies = [
"find-msvc-tools", "find-msvc-tools",
"shlex", "shlex",
@@ -351,7 +351,7 @@ checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
[[package]] [[package]]
name = "form-generator" name = "form-generator"
version = "0.1.1" version = "0.1.2"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"askama", "askama",
@@ -596,9 +596,9 @@ dependencies = [
[[package]] [[package]]
name = "hyper-util" name = "hyper-util"
version = "0.1.18" version = "0.1.19"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52e9a2a24dc5c6821e71a7030e1e14b7b632acac55c40e9d2e082c621261bb56" checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f"
dependencies = [ dependencies = [
"bytes", "bytes",
"futures-channel", "futures-channel",
@@ -679,9 +679,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
[[package]] [[package]]
name = "libc" name = "libc"
version = "0.2.177" version = "0.2.178"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091"
[[package]] [[package]]
name = "lock_api" name = "lock_api"
@@ -694,9 +694,9 @@ dependencies = [
[[package]] [[package]]
name = "log" name = "log"
version = "0.4.28" version = "0.4.29"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
[[package]] [[package]]
name = "matchit" name = "matchit"
@@ -718,9 +718,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
[[package]] [[package]]
name = "mio" name = "mio"
version = "1.1.0" version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc"
dependencies = [ dependencies = [
"libc", "libc",
"wasi", "wasi",
@@ -1287,9 +1287,9 @@ dependencies = [
[[package]] [[package]]
name = "tower-http" name = "tower-http"
version = "0.6.7" version = "0.6.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9cf146f99d442e8e68e585f5d798ccd3cad9a7835b917e09728880a862706456" checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"bytes", "bytes",
+1 -1
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "form-generator" name = "form-generator"
version = "0.1.1" version = "0.1.2"
edition = "2024" edition = "2024"
[dependencies] [dependencies]
+2 -1
View File
@@ -32,4 +32,5 @@ See [config.toml](./config.toml) for an example.
## Lib ## Lib
This crate also provides a library so you can run the form server alongside another app. This crate also provides a library so you can embed the form into an axum server.
The `app_router` function provides an axum router with provided routes.
+8 -3
View File
@@ -16,7 +16,12 @@ use crate::handlers::AppConfig;
/// Returns an `axum::Router` configured with the `/form` and `/submit` routes /// Returns an `axum::Router` configured with the `/form` and `/submit` routes
/// This router can be merged into another router using `merge`. /// This router can be merged into another router using `merge`.
pub fn app_router(cfg: AppConfig, output_file: String) -> Router { pub fn app_router(
cfg: AppConfig,
output_file: String,
form_route: &str,
submit_route: &str,
) -> Router {
let state = AppState { let state = AppState {
cfg: Arc::new(cfg), cfg: Arc::new(cfg),
file_lock: Arc::new(Mutex::new(())), file_lock: Arc::new(Mutex::new(())),
@@ -24,7 +29,7 @@ pub fn app_router(cfg: AppConfig, output_file: String) -> Router {
}; };
Router::new() Router::new()
.route("/form", get(render_form)) .route(form_route, get(render_form))
.route("/submit", post(submit)) .route(submit_route, post(submit))
.with_state(state) .with_state(state)
} }
+7 -2
View File
@@ -9,7 +9,7 @@ use axum::{
}; };
use clap::Parser; use clap::Parser;
use form_generator::{app_router, config::load_config}; use form_generator::config::load_config;
use tower_governor::{GovernorLayer, governor::GovernorConfigBuilder}; use tower_governor::{GovernorLayer, governor::GovernorConfigBuilder};
use tower_http::cors::{Any, CorsLayer}; use tower_http::cors::{Any, CorsLayer};
@@ -65,7 +65,12 @@ async fn main() -> anyhow::Result<()> {
}); });
let app = Router::new() let app = Router::new()
.merge(app_router(cfg, cli.output_file)) .merge(form_generator::app_router(
cfg,
cli.output_file,
"/form",
"/submit",
))
.route("/", get(form_redirect)) .route("/", get(form_redirect))
.layer(cors) .layer(cors)
.layer(GovernorLayer::new(governor_conf)); .layer(GovernorLayer::new(governor_conf));