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

  1. 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.