{"record":{"id":"a5903b20cf58ecb0","repo":"BoundaryML/baml","slug":"enum-does-not-exist","errorCode":null,"errorMessage":"Enum {} does not exist","messagePattern":"Enum (.+?) does not exist","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"engine/baml-lib/jsonish/src/helpers/mod.rs","lineNumber":97,"sourceCode":"    let Some(field_walker) = class_walker.find_field(field_name) else {\n        anyhow::bail!(\"Class {} does not have a field: {}\", class_name, field_name);\n    };\n\n    let name = Name::new_with_alias(field_name.to_string(), field_walker.alias(env_values)?);\n    let desc = field_walker.description(env_values)?;\n    let r#type = field_walker.r#type();\n    let streaming_needed = field_walker.item.attributes.streaming_behavior().needed;\n    Ok((name, r#type.clone(), desc, streaming_needed))\n}\n\nfn find_enum_value(\n    enum_name: &str,\n    value_name: &str,\n    enum_walker: &Result<EnumWalker<'_>>,\n    env_values: &EvaluationContext<'_>,\n) -> Result<Option<(Name, Option<String>)>> {\n    if enum_walker.is_err() {\n        anyhow::bail!(\"Enum {} does not exist\", enum_name);\n    }\n\n    let value_walker = match enum_walker {\n        Ok(e) => e.find_value(value_name),\n        Err(_) => None,\n    };\n\n    let value_walker = match value_walker {\n        Some(v) => v,\n        None => return Ok(None),\n    };\n\n    if value_walker.skip(env_values)? {\n        return Ok(None);\n    }\n\n    let name = Name::new_with_alias(value_name.to_string(), value_walker.alias(env_values)?);\n    let desc = value_walker.description(env_values)?;","sourceCodeStart":79,"sourceCodeEnd":115,"githubUrl":"https://github.com/BoundaryML/baml/blob/bd85ce9dee1463ff04d27efd20531013a4ff46c1/engine/baml-lib/jsonish/src/helpers/mod.rs#L79-L115","documentation":"find_enum_value bails with 'Enum {} does not exist' when the provided EnumWalker Result is an Err, meaning the enum could not be resolved from the BAML sources. It is used to resolve enum values (and their aliases/descriptions) referenced from templates or helpers.","triggerScenarios":"relevant_data_models calls find_enum_value with enum_walker = env.find_enum(enum_name) returning Err — the enum name passed from a template/helper has no matching enum declaration.","commonSituations":"Typos in enum names in jinja templates; enum deleted or renamed while references remain; BAML file containing the enum not included in the project/loaded context.","solutions":["Fix the enum name in the template/helper call to match an enum declared in your .baml files.","Confirm the enum's .baml file is included and compiles (run baml-cli to list/validate schemas).","Regenerate after renames so all references update together.","Validate referenced enum names in CI to catch drift early."],"exampleFix":"// before\n{{ enum_descriptions[\"Sentiemnt\"] }}\n// after\n{{ enum_descriptions[\"Sentiment\"] }}","handlingStrategy":"validation","validationCode":"// before resolving enum values in templates\nlet enum_walker = env.find_enum(enum_name);\nif enum_walker.is_err() {\n    return Err(anyhow::anyhow!(\"template references unknown enum '{}' — check .baml files\", enum_name));\n}","typeGuard":"fn enum_resolves(env: &FunctionCfg, name: &str) -> bool { env.find_enum(name).is_ok() }","tryCatchPattern":"match find_enum_value(enum_name, value_name, &enum_walker, &env) {\n    Ok(v) => use_value(v),\n    Err(err) => return Err(err.context(\"template references an enum not defined in .baml\")),\n}","preventionTips":["Only reference enums declared in loaded .baml files","Validate templates with baml-cli in CI","Regenerate all references together after enum renames"],"tags":["rust","schema","enum","template"],"backgroundTag":"class-not-found","analyzedSha":"bd85ce9dee1463ff04d27efd20531013a4ff46c1","analyzedAt":"2026-09-12T03:38:25.718Z","contentChangedAt":"2026-09-12T03:38:25.718Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}