{"record":{"id":"090034efca423750","repo":"diesel-rs/diesel","slug":"expected-a-integer-literal-expression-but-got-som","errorCode":null,"errorMessage":"expected a integer literal expression, but got something else","messagePattern":"expected a integer literal expression, but got something else","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"diesel_derives/src/enum_.rs","lineNumber":197,"sourceCode":"                        }) => {\n                            if let syn::Expr::Lit(l) = &**expr {\n                                (-1, l)\n                            } else {\n                                return Err(syn::Error::new(\n                                    v.span(),\n                                    \"expected a literal expression, but got something else\",\n                                ));\n                            }\n                        }\n                        _ => {\n                            return Err(syn::Error::new(\n                                v.span(),\n                                \"expected a literal expression, but got something else\",\n                            ));\n                        }\n                    };\n                    let syn::Lit::Int(i) = &l.lit else {\n                        return Err(syn::Error::new(\n                            l.span(),\n                            \"expected a integer literal expression, but got something else\",\n                        ));\n                    };\n                    Ok(f * i.base10_parse::<i128>()?)\n                })\n                .transpose()?\n                .unwrap_or(idx as i128);\n            let rust_name = v.ident.clone();\n            let attrs = diesel_attribute_parser::parse_attributes::<\n                diesel_attribute_parser::FieldAttr,\n            >(&v.attrs)?;\n            let rename_attr = attrs.iter().find_map(|a| {\n                if let diesel_attribute_parser::FieldAttr::Rename(_, r) = &a.item {\n                    Some(r.value())\n                } else {\n                    None\n                }","sourceCodeStart":179,"sourceCodeEnd":215,"githubUrl":"https://github.com/diesel-rs/diesel/blob/6fa6ed01b24b24248ab2a611698d0a7c6a2e9120/diesel_derives/src/enum_.rs#L179-L215","documentation":"After extracting a literal expression from an enum variant value attribute, diesel_derives further requires it to be an integer literal (`syn::Lit::Int`). A literal of another kind (string, bool, float) reaching this check produces this error at enum_.rs:197.","triggerScenarios":"Writing a non-integer literal as an enum variant's numeric value, e.g. `Foo = \"one\"` or `Foo = 1.5`, in a derive that parses explicit discriminant values.","commonSituations":"String literals accidentally used for variant values; float discriminants; porting enums from languages that allow string tags; typos where quotes wrapped the number.","solutions":["Use an integer literal for the variant value (e.g. `Active = 1`).","If the value is fractional, decide on an integer representation (scale it) — floats are not accepted.","If you intended a string mapping, use serde-style attributes instead, not the diesel numeric-value attribute."],"exampleFix":"// before\nenum Role { Admin = \"admin\", }\n\n// after\nenum Role { Admin = 1, }","handlingStrategy":"validation","validationCode":"// Discriminant literals must be integers.\n// let ok = matches!(lit_str.trim(), s if s.parse::<i128>().is_ok());","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Avoid quoting numeric variant values (`Foo = \"1\"` fails).","Do not use float literals as discriminants.","Search for non-integer literals after `=` in diesel-derived enums before building."],"tags":["proc-macro","derive","literal-parsing","compile-time"],"backgroundTag":"invalid-argument-format","analyzedSha":"6fa6ed01b24b24248ab2a611698d0a7c6a2e9120","analyzedAt":"2026-09-07T01:50:13.074Z","contentChangedAt":"2026-09-07T01:50:13.074Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}