{"record":{"id":"c272b77dcec6156f","repo":"rwf2/Rocket","slug":"static","errorCode":"Static","errorMessage":"unexpected static parameter","messagePattern":"unexpected static parameter","errorType":"validation","errorClass":"rocket_codegen::param::Error","httpStatus":null,"severity":"error","filePath":"core/codegen/src/attribute/param/parse.rs","lineNumber":38,"sourceCode":"#[derive(Debug, PartialEq, Eq, Copy, Clone)]\npub enum ErrorKind {\n    Empty,\n    BadIdent,\n    Ignored,\n    EarlyTrailing,\n    NoTrailing,\n    Static,\n}\n\nimpl Dynamic {\n    pub fn parse<P: Part>(\n        segment: &str,\n        span: Span,\n    ) -> Result<Self, Error<'_>>  {\n        match Parameter::parse::<P>(segment, span)? {\n            Parameter::Dynamic(d) | Parameter::Ignored(d) => Ok(d),\n            Parameter::Guard(g) => Ok(g.source),\n            Parameter::Static(_) => Err(Error::new(segment, span, ErrorKind::Static)),\n        }\n    }\n}\n\nimpl Parameter {\n    pub fn parse<P: Part>(\n        segment: &str,\n        source_span: Span,\n    ) -> Result<Self, Error<'_>>  {\n        let mut trailing = false;\n\n        // Check if this is a dynamic param. If so, check its well-formedness.\n        let lint = Lint::SegmentChars;\n        if segment.starts_with('<') && segment.ends_with('>') {\n            let mut name = &segment[1..(segment.len() - 1)];\n            if name.ends_with(\"..\") {\n                trailing = true;\n                name = &name[..(name.len() - 2)];","sourceCodeStart":20,"sourceCodeEnd":56,"githubUrl":"https://github.com/rwf2/Rocket/blob/3a54d079aef060a8f732bd04ea54b0581a604087/core/codegen/src/attribute/param/parse.rs#L20-L56","documentation":"This is a compile-time codegen error from Rocket's route/attribute parameter parser. Dynamic::parse expects a dynamic parameter of the form <name> (optionally trailing, <name..>); when Parameter::parse classifies the segment as Parameter::Static (no surrounding angle brackets), Dynamic::parse rejects it with ErrorKind::Static ('unexpected static parameter'). It appears in attribute positions that require a dynamic parameter binding, such as data = \"<param>\" on a route or other FromMeta contexts that parse a Dynamic.","triggerScenarios":"Writing a static string where a dynamic parameter is required, e.g. #[post(\"/upload\", data = \"payload\")] instead of data = \"<payload>\", or any attribute value parsed via the FromMeta impl for Dynamic that lacks <...> delimiters.","commonSituations":"Forgetting the angle brackets on the data parameter of a route macro; copying a query string field name style (id=5) into a dynamic-parameter slot; muscle memory from other frameworks where the parameter name is bare.","solutions":["Wrap the parameter name in angle brackets: data = \"<payload>\"","Check the exact attribute position the error span points at — only route paths allow static segments; parameter bindings like data = require <name>","Re-run cargo check to confirm the span now parses"],"exampleFix":"// before\n#[post(\"/upload\", data = \"payload\")]\nfn upload(payload: TempFile<'_>) { }\n\n// after\n#[post(\"/upload\", data = \"<payload>\")]\nfn upload(payload: TempFile<'_>) { }","handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":["Treat data = \"<name>\" as the only valid form — angle brackets required","Match the name inside <...> exactly to the handler argument name","Run cargo check early after editing route macros to catch codegen errors before runtime"],"tags":["rust","rocket","proc-macro","codegen","compile-time","route-attribute"],"backgroundTag":"macro-argument-validation","analyzedSha":"3a54d079aef060a8f732bd04ea54b0581a604087","analyzedAt":"2026-08-16T22:01:48.395Z","schemaVersion":2},"datasetVersion":"2026-08-16T23:17:17.608Z"}