{"record":{"id":"c4fd305fb3c27d4c","repo":"influxdata/influxdb","slug":"duplicate-shape","errorCode":null,"errorMessage":"duplicate `shape`","messagePattern":"duplicate `shape`","errorType":"validation","errorClass":"syn::Error","httpStatus":null,"severity":"error","filePath":"influxdb3_catalog_macros/src/lib.rs","lineNumber":110,"sourceCode":"                \"id\" => {\n                    if id.replace(nv.value).is_some() {\n                        return Err(syn::Error::new(nv.path.span(), \"duplicate `id`\"));\n                    }\n                }\n                \"shape\" => {\n                    let span = nv.value.span();\n                    let Expr::Lit(syn::ExprLit {\n                        lit: syn::Lit::Int(lit),\n                        ..\n                    }) = nv.value\n                    else {\n                        return Err(syn::Error::new(\n                            span,\n                            \"`shape` must be an integer literal, e.g. `shape = 0xbba17476`\",\n                        ));\n                    };\n                    if shape.replace(lit).is_some() {\n                        return Err(syn::Error::new(nv.path.span(), \"duplicate `shape`\"));\n                    }\n                }\n                \"flags\" => {\n                    if flags.replace(nv.value).is_some() {\n                        return Err(syn::Error::new(nv.path.span(), \"duplicate `flags`\"));\n                    }\n                }\n                other => {\n                    return Err(syn::Error::new(\n                        nv.path.span(),\n                        format!(\n                            \"unknown argument `{other}`; supported arguments are `id`, `shape`, `flags`\"\n                        ),\n                    ));\n                }\n            }\n        }\n","sourceCodeStart":92,"sourceCodeEnd":128,"githubUrl":"https://github.com/influxdata/influxdb/blob/06200ef96ba82c5f6727e5038a83af8e722c6875/influxdb3_catalog_macros/src/lib.rs#L92-L128","documentation":"Compile-time error from the influxdb3_catalog_macros attribute parser: the `shape = <int>` key was supplied more than once in the macro invocation attributes. The parser walks name-value pairs and stores each in an Option; a second occurrence finds it already set and aborts with this syn::Error at the duplicate key's span. It is a validation guard over macro input syntax, raised during procedural-macro expansion (as exercised by tests like flags_default_to_none and err). Fix by keeping a single `shape` entry.","triggerScenarios":"Writing `#[catalog(id = ..., shape = 0x1, shape = 0x2)]`.","commonSituations":"Merging examples; pasting a corrected shape without deleting the old placeholder line; code generation emitting shape twice.","solutions":["Delete the extra `shape = ...` entry, keeping the correct one","Ensure exactly one shape literal per attribute"],"exampleFix":"// before\n#[catalog(id = record_ids::X, shape = 0x1, shape = 0xbba17476)]\n// after\n#[catalog(id = record_ids::X, shape = 0xbba17476)]","handlingStrategy":"validation","validationCode":"// Exactly one shape argument per attribute:\n// bad:  #[catalog(id = X, shape = 0x1, shape = 0x2)]\n// good: #[catalog(id = X, shape = 0x2)]","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Delete old placeholder shapes when updating values","Deduplicate keys when merging attribute examples"],"tags":["rust","proc-macro","duplicate-argument","attribute"],"backgroundTag":"conflicting-config-options","analyzedSha":"06200ef96ba82c5f6727e5038a83af8e722c6875","analyzedAt":"2026-09-19T12:55:30.003Z","contentChangedAt":"2026-09-19T12:55:30.003Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}