{"record":{"id":"8de79734ef1af7fe","repo":"netdata/netdata","slug":"name-expects-exactly-1-argument","errorCode":null,"errorMessage":"{name}() expects exactly 1 argument","messagePattern":"(.+?)\\(\\) expects exactly 1 argument","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/crates/netflow-plugin/src/enrichment/classifiers/parse/value.rs","lineNumber":6,"sourceCode":"use super::split::*;\nuse super::*;\n\npub(super) fn one_arg(name: &str, args: &[String]) -> Result<ValueExpr> {\n    if args.len() != 1 {\n        anyhow::bail!(\"{name}() expects exactly 1 argument\");\n    }\n    parse_value_expr(args[0].trim())\n}\n\nfn three_args(name: &str, args: &[String]) -> Result<(ValueExpr, ValueExpr, ValueExpr)> {\n    if args.len() != 3 {\n        anyhow::bail!(\"{name}() expects exactly 3 arguments\");\n    }\n    Ok((\n        parse_value_expr(args[0].trim())?,\n        parse_value_expr(args[1].trim())?,\n        parse_value_expr(args[2].trim())?,\n    ))\n}\n\npub(super) fn one_string_arg(name: &str, args: &[String]) -> Result<ValueExpr> {\n    let value = one_arg(name, args)?;\n    if !value.is_string_expression() {","sourceCodeStart":1,"sourceCodeEnd":24,"githubUrl":"https://github.com/netdata/netdata/blob/4864de85e26f6734d92cfc27ccbeff5921f49938/src/crates/netflow-plugin/src/enrichment/classifiers/parse/value.rs#L1-L24","documentation":"A one-argument value function (via `one_arg`) received a different number of arguments — the parser checks `args.len() != 1` before parsing the single argument. Applies to functions like SetName/ClassifyRole targets where exactly one value expression is allowed.","triggerScenarios":"Calling a 1-arg function with zero or multiple arguments: `SetName()`, `SetName(a, b)`, `ClassifyRole()`.","commonSituations":"Expecting SetName to accept multiple concatenated values instead of using `+` concatenation; forgetting the argument entirely.","solutions":["Provide exactly one argument.","To combine values, use one concatenated expression: `SetName(Format(\"{}-{}\", A, B))` or `SetName(A + B)`."],"exampleFix":"// before\nSetName(DstIP, SrcIP)\n\n// after\nSetName(DstIP + \"/\" + SrcIP)","handlingStrategy":"validation","validationCode":"fn arity_ok(name: &str, args: &[String]) -> bool {\n    if matches!(name, \"SetName\" | \"SetDescription\" | \"ClassifyRole\" | \"ClassifySite\" | \"Classify\" | \"ClassifyGroup\") {\n        return args.len() == 1;\n    }\n    true\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["One-arg functions accept exactly one value expression; use + or Format() to combine."],"tags":["rust","classifier","config","parse-error","arity"],"backgroundTag":null,"analyzedSha":"4864de85e26f6734d92cfc27ccbeff5921f49938","analyzedAt":"2026-08-15T09:12:38.226Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}