Skip to main content

max / makenotwork

Take the request's three bags quasi@f5cf080 split Params into captures, payload and carried, so a screen that carries its view in the address can tell a filter from a write's value instead of holding the two apart by a naming convention. Handler<S> takes a Request now. Two call sites here and neither reads a parameter yet, so this is the signature and nothing else. The spike's finding 2 described the old single bag and is reworded rather than left describing a type that is gone.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-08-10 22:43 UTC
Signed with PGP, not checked
Commit: 3c50de42fb3f7f90c852bd6230945c8b1e4382f5
Parent: 620f82e
3 files changed, +9 insertions, -9 deletions
@@ -14,7 +14,7 @@
14 14 //!
15 15 //! # Finding 1: a handler cannot await, and this server's data layer is async
16 16 //!
17 - //! [`quasi_router::Handler`] is `fn(&S, Params) -> Result<Response, RouteError>`,
17 + //! [`quasi_router::Handler`] is `fn(&S, Request) -> Result<Response, RouteError>`,
18 18 //! sync by quasi's decision 6, which was taken for egui-in-a-frame and
19 19 //! terminal-in-an-event-loop and matches the desktop apps' rusqlite store. This
20 20 //! server is async sqlx over Postgres end to end. `quasi-axum` runs the router
@@ -25,9 +25,9 @@
25 25 //!
26 26 //! # Finding 2: nothing carries identity into a handler
27 27 //!
28 - //! `quasi_http::decode` builds `Incoming { method, path, params }` and drops the
29 - //! header map. Params are the query string and the form body, which is to say
30 - //! things the client chose. A handler receives `&S`, which is shared, and those
28 + //! `quasi_http::decode` builds the request and drops the header map. Its
29 + //! parameters are the path captures, the form body and the query string, which
30 + //! is to say things the route pattern fixed or the client chose. A handler receives `&S`, which is shared, and those
31 31 //! params. There is no session, no cookie, no `AuthUser`, and no side channel:
32 32 //! the doc comment on `Adapter::per_request` says so explicitly, and that
33 33 //! factory feeds the *renderer*, after dispatch, not the handler.
@@ -94,14 +94,14 @@
94 94
95 95 use docengine::DocLoader;
96 96 use quasi_axum::Adapter;
97 - use quasi_router::{Node, Params, RegionKind, Response, RouteError, Row, Screen, Slot};
97 + use quasi_router::{Node, RegionKind, Request, Response, RouteError, Row, Screen, Slot};
98 98 use quasi_webview::{Shell, Webview};
99 99
100 100 /// The docs index, described.
101 101 ///
102 102 /// Compare against `routes::pages::public::docs::docs_index`, which is the same
103 103 /// grouping over the same loader ending in `DocIndexTemplate`.
104 - fn docs_index(docs: &DocLoader, _params: Params) -> Result<Response, RouteError> {
104 + fn docs_index(docs: &DocLoader, _request: Request) -> Result<Response, RouteError> {
105 105 // The grouping is the handler's either way. Describing a screen does not
106 106 // remove the domain pass over the index, and this is a fair copy of it.
107 107 let mut sections: Vec<(String, Vec<Row>)> = Vec::new();
@@ -8,7 +8,7 @@
8 8 //!
9 9 //! # Why a per-request state and not a per-request handler argument
10 10 //!
11 - //! `quasi_router::Handler<S> = fn(&S, Params)`. `S` is the app, and on every
11 + //! `quasi_router::Handler<S> = fn(&S, Request)`. `S` is the app, and on every
12 12 //! other host in the tree there is one app and one viewer for the life of the
13 13 //! process. A server has one process and many viewers, and that is the only
14 14 //! assumption it breaks, so the fix is that the adapter builds `S` per request
@@ -41,7 +41,7 @@
41 41
42 42 use makeover_layout as layout;
43 43 use quasi_router::screen::{Act, Choice, Field, Row};
44 - use quasi_router::{Action, Node, Params, RegionKind, Response, RouteError, Slot};
44 + use quasi_router::{Action, Node, RegionKind, Request, Response, RouteError, Slot};
45 45 use quasi_webview::{Shell, Webview};
46 46
47 47 use super::Viewer;
@@ -80,7 +80,7 @@
80 80 }
81 81
82 82 /// The tab.
83 - pub fn screen(viewer: &Viewer, _params: Params) -> Result<Response, RouteError> {
83 + pub fn screen(viewer: &Viewer, _request: Request) -> Result<Response, RouteError> {
84 84 let user_id = viewer.user.id;
85 85
86 86 // Three round trips, each holding this blocking thread. The thing S3