{"record":{"id":"cd89f9477e3bd565","repo":"quickwit-oss/quickwit","slug":"unknown-field","errorCode":null,"errorMessage":"unknown field","messagePattern":"unknown field","errorType":"exception","errorClass":"proc-macro compile error","httpStatus":null,"severity":"error","filePath":"quickwit/quickwit-macros/src/lib.rs","lineNumber":404,"sourceCode":"    fn parse(input: ParseStream) -> Result<Self, Error> {\n        let ident: Ident = input.parse()?;\n        match ident.to_string().as_str() {\n            \"serializer\" => {\n                input.parse::<Token![=]>()?;\n                Ok(MultiKeyOption::Serializer(input.parse::<Path>()?))\n            }\n            \"deserializer\" => {\n                input.parse::<Token![=]>()?;\n                Ok(MultiKeyOption::Deserializer(input.parse::<Path>()?))\n            }\n            \"fields\" => {\n                input.parse::<Token![=]>()?;\n                let content;\n                parenthesized!(content in input);\n                let fields = content.parse_terminated(Field::parse_named, Token![,])?;\n                Ok(MultiKeyOption::Fields(fields.into_iter().collect()))\n            }\n            _ => Err(Error::new(ident.span(), \"unknown field\")),\n        }\n    }\n}\n\nimpl Parse for MultiKeyOptions {\n    fn parse(input: ParseStream) -> Result<Self, Error> {\n        let mut res = MultiKeyOptions {\n            main_field_name: Ident::new(\"tmp_name\", Span::call_site()),\n            deserializer: None,\n            serializer: None,\n            proxy_fields: Vec::new(),\n        };\n\n        let options = Punctuated::<MultiKeyOption, Token![,]>::parse_terminated(input)?;\n        for option in options {\n            match option {\n                MultiKeyOption::Deserializer(path) => {\n                    if res.deserializer.is_none() {","sourceCodeStart":386,"sourceCodeEnd":422,"githubUrl":"https://github.com/quickwit-oss/quickwit/blob/a39730c5cdcd1a4fe798403737ae293999ea21f8/quickwit/quickwit-macros/src/lib.rs#L386-L422","documentation":"serde_multikey's attribute options are parsed by MultiKeyOption::parse, which accepts only a known set of identifiers (e.g. `fields`). Any other identifier in the attribute args produces this compile error pointing at the unknown identifier.","triggerScenarios":"Writing an unrecognized option inside #[serde_multikey(...)], e.g. a misspelled `field` instead of `fields`, or an option name that does not exist in the macro grammar.","commonSituations":"Typos in attribute options; copying attribute syntax from other serde macros (like #[serde(...)] options) that serde_multikey does not support.","solutions":["Use the supported option name `fields(...)` with a comma-separated list of named field configs.","Check the quickwit-macros documentation/tests for the exact attribute grammar and fix typos."],"exampleFix":"// before\n#[serde_multikey(field(value))]\n// after\n#[serde_multikey(fields(value))]","handlingStrategy":"validation","validationCode":"// Only supported attribute option is `fields`:\n// #[serde_multikey(fields(<name>[(into = .., try_from = ..)], ...))]","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use exactly `fields(...)` as the option name; watch for singular/plural typos","Do not reuse #[serde(...)] option names inside #[serde_multikey]","Consult quickwit-macros tests/examples for the accepted grammar"],"tags":["rust","proc-macro","attribute-macro","compile-time"],"backgroundTag":"invalid-argument-value","analyzedSha":"a39730c5cdcd1a4fe798403737ae293999ea21f8","analyzedAt":"2026-09-08T13:19:37.784Z","contentChangedAt":"2026-09-08T13:19:37.784Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}