diesel-rs/diesel · error · syn::Error

Invalid `#[sql_name = ]` attribute

Error message

Invalid `#[sql_name = {attribute_name:?}]` attribute

What it means

Compile-time error from take_lit in diesel_table_macro_syntax, which extracts a string-literal value for an attribute such as #[sql_name = "..."] from the macro input. This guard fires when the named attribute was found but its meta is not a NameValue with a literal value — e.g. #[sql_name] without `= "..."`, or a non-literal expression. Fix: write `#[sql_name = "your_name"]` with a string literal.

Solutions

  1. Use `#[sql_name = "..."]` with a string literal
  2. Remove the attribute if not needed
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at diesel_table_macro_syntax/src/lib.rs:235 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of diesel-rs/diesel@6fa6ed01b2 (2026-09-07). Data as JSON: /api/errors/b38afab80230865a. Report an issue: GitHub.

Appendix: source

Thrown at diesel_table_macro_syntax/src/lib.rs:235

    if let Some(index) = meta.iter().position(|m| {
        m.path()
            .get_ident()
            .map(|i| i == attribute_name)
            .unwrap_or(false)
    }) {
        let attribute = meta.remove(index);
        let span = attribute.span();
        let extraction_after_finding_attr = if let syn::Meta::NameValue(MetaNameValue {
            value: syn::Expr::Lit(syn::ExprLit { lit, .. }),
            ..
        }) = attribute.meta
        {
            extraction_fn(lit)
        } else {
            None
        };
        return Ok(Some(extraction_after_finding_attr.ok_or_else(|| {
            syn::Error::new(
                span,
                format_args!("Invalid `#[sql_name = {attribute_name:?}]` attribute"),
            )
        })?));
    }
    Ok(None)
}

fn take_flag(
    meta: &mut Vec<syn::Attribute>,
    attribute_name: &'static str,
) -> Result<bool, syn::Error> {
    if let Some(index) = meta.iter().position(|m| {
        m.path()
            .get_ident()
            .map(|i| i == attribute_name)
            .unwrap_or(false)
    }) {

View on GitHub (pinned to 6fa6ed01b2)