diff options
| author | Owen Jacobson <owen@grimoire.ca> | 2025-06-17 02:11:45 -0400 |
|---|---|---|
| committer | Owen Jacobson <owen@grimoire.ca> | 2025-06-18 18:31:40 -0400 |
| commit | 4e3d5ccac99b24934c972e088cd7eb02bb95df06 (patch) | |
| tree | c94f5a42f7e734b81892c1289a1d2b566706ba7c /src/setup | |
| parent | 5ed96f8e8b9d9f19ee249f5c73a5a21ef6bca09f (diff) | |
Handlers are _named operations_, which can be exposed via routes.
Each domain module that exposes handlers does so through a `handlers` child module, ideally as a top-level symbol that can be plugged directly into Axum's `MethodRouter`. Modules could make exceptions to this - kill the doctrinaire inside yourself, after all - but none of the API modules that actually exist need such exceptions, and consistency is useful.
The related details of request types, URL types, response types, errors, &c &c are then organized into modules under `handlers`, along with their respective tests.
Diffstat (limited to 'src/setup')
| -rw-r--r-- | src/setup/handlers/mod.rs | 3 | ||||
| -rw-r--r-- | src/setup/handlers/setup/mod.rs (renamed from src/setup/routes/post.rs) | 3 | ||||
| -rw-r--r-- | src/setup/handlers/setup/test.rs (renamed from src/setup/routes/test.rs) | 17 | ||||
| -rw-r--r-- | src/setup/mod.rs | 2 | ||||
| -rw-r--r-- | src/setup/routes/mod.rs | 3 |
5 files changed, 15 insertions, 13 deletions
diff --git a/src/setup/handlers/mod.rs b/src/setup/handlers/mod.rs new file mode 100644 index 0000000..3d4a4e6 --- /dev/null +++ b/src/setup/handlers/mod.rs @@ -0,0 +1,3 @@ +mod setup; + +pub use setup::handler as setup; diff --git a/src/setup/routes/post.rs b/src/setup/handlers/setup/mod.rs index 0ff5d69..cbb3072 100644 --- a/src/setup/routes/post.rs +++ b/src/setup/handlers/setup/mod.rs @@ -14,6 +14,9 @@ use crate::{ user::{Password, User}, }; +#[cfg(test)] +mod test; + pub async fn handler( State(app): State<App>, RequestedAt(setup_at): RequestedAt, diff --git a/src/setup/routes/test.rs b/src/setup/handlers/setup/test.rs index e9f5cd6..8243ac3 100644 --- a/src/setup/routes/test.rs +++ b/src/setup/handlers/setup/test.rs @@ -1,6 +1,5 @@ use axum::extract::{Json, State}; -use super::post; use crate::{setup::app, test::fixtures}; #[tokio::test] @@ -12,12 +11,12 @@ async fn fresh_instance() { // Call the endpoint let identity = fixtures::cookie::not_logged_in(); let (name, password) = fixtures::user::propose(); - let request = post::Request { + let request = super::Request { name: name.clone(), password: password.clone(), }; let (identity, Json(response)) = - post::handler(State(app.clone()), fixtures::now(), identity, Json(request)) + super::handler(State(app.clone()), fixtures::now(), identity, Json(request)) .await .expect("setup in a fresh app succeeds"); @@ -57,9 +56,9 @@ async fn login_exists() { // Call the endpoint let identity = fixtures::cookie::not_logged_in(); let (name, password) = fixtures::user::propose(); - let request = post::Request { name, password }; - let post::Error(error) = - post::handler(State(app.clone()), fixtures::now(), identity, Json(request)) + let request = super::Request { name, password }; + let super::Error(error) = + super::handler(State(app.clone()), fixtures::now(), identity, Json(request)) .await .expect_err("setup in a populated app fails"); @@ -79,12 +78,12 @@ async fn invalid_name() { let name = fixtures::user::propose_invalid_name(); let password = fixtures::user::propose_password(); let identity = fixtures::cookie::not_logged_in(); - let request = post::Request { + let request = super::Request { name: name.clone(), password: password.clone(), }; - let post::Error(error) = - post::handler(State(app.clone()), fixtures::now(), identity, Json(request)) + let super::Error(error) = + super::handler(State(app.clone()), fixtures::now(), identity, Json(request)) .await .expect_err("setup with an invalid name fails"); diff --git a/src/setup/mod.rs b/src/setup/mod.rs index e741a60..f5d12df 100644 --- a/src/setup/mod.rs +++ b/src/setup/mod.rs @@ -1,6 +1,6 @@ pub mod app; +pub mod handlers; pub mod repo; mod required; -pub mod routes; pub use self::required::Required; diff --git a/src/setup/routes/mod.rs b/src/setup/routes/mod.rs deleted file mode 100644 index e94a249..0000000 --- a/src/setup/routes/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod post; -#[cfg(test)] -mod test; |
