{"record":{"id":"6eaca8284ca5547f","repo":"pydantic/monty","slug":"only-one-from-args-varargs-field-is-allowed","errorCode":null,"errorMessage":"only one `#[from_args(varargs)]` field is allowed","messagePattern":"only one `#\\[from_args\\(varargs\\)\\]` field is allowed","errorType":"validation","errorClass":"syn::Error","httpStatus":null,"severity":"error","filePath":"crates/monty-macros/src/from_args.rs","lineNumber":589,"sourceCode":"                if seen_varargs {\n                    // Implicit kw_only after varargs.\n                    field.kind = FieldKind::KwOnly;\n                    seen_kw_only = true;\n                } else if seen_kw_only {\n                    return Err(syn::Error::new(\n                        field.ident.span(),\n                        \"positional-or-keyword fields cannot appear after keyword-only fields\",\n                    ));\n                } else {\n                    seen_pos_or_kw = true;\n                }\n            }\n            FieldKind::KwOnly => {\n                seen_kw_only = true;\n            }\n            FieldKind::Varargs => {\n                if seen_varargs {\n                    return Err(syn::Error::new(\n                        field.ident.span(),\n                        \"only one `#[from_args(varargs)]` field is allowed\",\n                    ));\n                }\n                if seen_kw_only {\n                    return Err(syn::Error::new(\n                        field.ident.span(),\n                        \"`varargs` cannot appear after keyword-only fields — Python has no \\\n                         signature form with `*args` following keyword-only parameters\",\n                    ));\n                }\n                seen_varargs = true;\n                varargs_idx = Some(idx);\n            }\n            FieldKind::Varkwargs => {\n                if seen_varkwargs {\n                    return Err(syn::Error::new(\n                        field.ident.span(),","sourceCodeStart":571,"sourceCodeEnd":607,"githubUrl":"https://github.com/pydantic/monty/blob/adc986b362e3961f407868cb118a99fe831b9e61/crates/monty-macros/src/from_args.rs#L571-L607","documentation":"A compile-time error from the `FromArgs` derive macro. Python signatures allow at most one `*args` parameter, so the macro permits at most one field tagged `#[from_args(varargs)]` per struct. A second tagged field cannot be mapped onto a Python signature and is rejected at codegen.","triggerScenarios":"Deriving `FromArgs` on a struct containing two or more fields annotated `#[from_args(varargs)]`.","commonSituations":"Copy-pasting a varargs field to add a second positional catch-all, or merging two arg structs that each had their own varargs field.","solutions":["Keep only one `#[from_args(varargs)]` field and model the extra positional values inside it (e.g. a `Vec<Value>` field)","If the second field has a fixed arity, remove the `varargs` attribute and declare it as a normal positional field","If the second field is truly keyword-based, change it to `#[from_args(kw_only)]` or `#[from_args(varkwargs)]`"],"exampleFix":"// before\n#[derive(FromArgs)]\n#[from_args(name = \"f\"])\nstruct FArgs {\n    #[from_args(varargs)]\n    args: Vec<Value>,\n    #[from_args(varargs)]\n    more: Vec<Value>,\n}\n\n// after\n#[derive(FromArgs)]\n#[from_args(name = \"f\"])\nstruct FArgs {\n    #[from_args(varargs)]\n    args: Vec<Value>,\n}","handlingStrategy":"validation","validationCode":"// At most one varargs field per struct.\nfn at_most_one(kind: &str, kinds: &[&str]) -> bool {\n    kinds.iter().filter(|k| **k == kind).count() <= 1\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["One varargs field per arg struct — collect everything positional into it","Search the struct for duplicate #[from_args(varargs)] lines after merges","Model extra positional data inside the single Vec<Value> varargs field"],"tags":["rust","derive-macro","compile-time","argument-parsing"],"backgroundTag":"schema-validation-failed","analyzedSha":"adc986b362e3961f407868cb118a99fe831b9e61","analyzedAt":"2026-09-13T19:19:18.698Z","contentChangedAt":"2026-09-13T19:19:18.698Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}