influxdata/influxdb · error · syn::Error

unknown argument ` `; supported arguments are `id`…

Error message

unknown argument `{other}`; supported arguments are `id`, `shape`, `flags`

What it means

A compile-time proc-macro error raised when the catalog record attribute contains an unrecognized `name = value` argument; the parser only supports `id`, `shape`, and `flags`, so any other key aborts macro expansion at that argument's span.

Solutions

  1. Rename the argument to one of the supported keys: id, shape, flags
  2. Fix typos in the key name (match exact lowercase identifiers)
  3. Remove unsupported arguments entirely

Example fix

// before
#[catalog(id = record_ids::X, shpae = 0xbba17476)]
// after
#[catalog(id = record_ids::X, shape = 0xbba17476)]
Defensive patterns

Strategy: validation

Validate before calling

const ALLOWED: [&str; 3] = ["id", "shape", "flags"];
fn key_allowed(k: &str) -> bool { ALLOWED.contains(&k) }

Type guard

fn is_valid_key(k: &str) -> bool {
    matches!(k, "id" | "shape" | "flags")
}

Prevention

When it happens

Trigger: Misspelling a supported key (e.g. `Id = ...`, `shpae = 0x…`) or inventing a new key like `version = 1` in the macro attribute.

Common situations: Typos in attribute keys; copying attribute syntax from a different macro family; upgrading the macro where keys changed names.

Understand the failure class

Background: "must be a positive integer", "cannot be empty", "invalid argument": how invalid-argument errors work across open-source libraries — this error's family across 33 libraries.

Related errors


AI-assisted analysis of influxdata/influxdb@06200ef96b (2026-09-19). Data as JSON: /api/errors/cd036177d76d13ab. Report an issue: GitHub.

Appendix: source

Thrown at influxdb3_catalog_macros/src/lib.rs:119

                        ..
                    }) = nv.value
                    else {
                        return Err(syn::Error::new(
                            span,
                            "`shape` must be an integer literal, e.g. `shape = 0xbba17476`",
                        ));
                    };
                    if shape.replace(lit).is_some() {
                        return Err(syn::Error::new(nv.path.span(), "duplicate `shape`"));
                    }
                }
                "flags" => {
                    if flags.replace(nv.value).is_some() {
                        return Err(syn::Error::new(nv.path.span(), "duplicate `flags`"));
                    }
                }
                other => {
                    return Err(syn::Error::new(
                        nv.path.span(),
                        format!(
                            "unknown argument `{other}`; supported arguments are `id`, `shape`, `flags`"
                        ),
                    ));
                }
            }
        }

        let id = id.ok_or_else(|| {
            syn::Error::new(
                proc_macro2::Span::call_site(),
                "missing `id = record_ids::SOME_CONST`",
            )
        })?;
        let shape = shape.ok_or_else(|| {
            syn::Error::new(
                proc_macro2::Span::call_site(),

View on GitHub (pinned to 06200ef96b)