DioxusLabs/dioxus · error
Expected closure argument to be a typed pattern
Error message
Expected closure argument to be a typed pattern
What it means
While generating redirect functions in the router macro, a closure argument pattern was not a typed pattern (e.g. a wildcard or invalid syntax). Redirect closures must bind typed arguments so the macro can parse query/segment parameters; anything else panics in to_tokens.
Source
Thrown at packages/router-macro/src/route_tree.rs:454
.enumerate()
.skip_while(|(_, seg)| matches!(seg, RouteSegment::Static(_)));
let parse_query = redirect.parse_query();
let parse_hash = redirect.parse_hash();
let insure_not_trailing = redirect
.segments
.last()
.map(|seg| !matches!(seg, RouteSegment::CatchAll(_, _)))
.unwrap_or(true);
let redirect_function = &redirect.function;
let args = redirect_function.inputs.iter().map(|pat| match pat {
syn::Pat::Type(ident) => {
let name = &ident.pat;
quote! {#name}
}
_ => panic!("Expected closure argument to be a typed pattern"),
});
let return_redirect = quote! {
(#redirect_function)(#(#args,)*)
};
print_route_segment(
route_segments.peekable(),
return_constructed(
insure_not_trailing,
return_redirect,
&error_enum_name,
enum_variant,
&variant_parse_error,
parse_query,
parse_hash,
),
&error_enum_name,
enum_variant,View on GitHub (pinned to 24f6a829df)
Solutions
- Give the route closure argument an explicit typed pattern, e.g. |id: usize|.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at packages/router-macro/src/route_tree.rs:454 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of DioxusLabs/dioxus@24f6a829df (2026-08-23).
Data as JSON: /api/errors/7be51d3c1f637ed4.
Report an issue: GitHub.