{"record":{"id":"fd3459d90d175b95","repo":"BoundaryML/baml","slug":"enum-value-not-found-in-enum","errorCode":null,"errorMessage":"Enum value not found: {} in enum {}","messagePattern":"Enum value not found: (.+?) in enum (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"engine/language_client_cffi/src/raw_ptr_wrapper/type_builder/objects.rs","lineNumber":719,"sourceCode":"            .collect())\n    }\n\n    pub fn value(&self, rt: &BamlRuntime, name: &str) -> anyhow::Result<EnumValueBuilder> {\n        self.mode.at_least(NodeRW::ReadOnly)?;\n        let enm = self.enm(rt)?;\n\n        let builder = enm.lock().unwrap();\n        let values = builder.list_values();\n        if values.contains(&name.to_string()) {\n            Ok(self.create_value(name, rt))\n        } else {\n            // if the IR has the value, then its valid to add it again\n            if let Ok(enm_ir) = rt.ir.find_enum(self.enum_name.as_str()) {\n                if enm_ir.find_value(name).is_some() {\n                    let _ = builder.upsert_value(name);\n                    Ok(self.create_value(name, rt))\n                } else {\n                    anyhow::bail!(\"Enum value not found: {} in enum {}\", name, self.enum_name)\n                }\n            } else {\n                anyhow::bail!(\"Enum value not found: {} in enum {}\", name, self.enum_name)\n            }\n        }\n    }\n\n    pub fn is_from_ast(&self, rt: &BamlRuntime) -> anyhow::Result<bool> {\n        self.mode.at_least(NodeRW::ReadOnly)?;\n        Ok(rt.ir.find_enum(self.enum_name.as_str()).is_ok())\n    }\n}\n\n#[derive(Debug, Clone)]\npub struct EnumValueBuilder {\n    type_builder: RuntimeTypeBuilder,\n    enum_name: String,\n    pub value_name: String,","sourceCodeStart":701,"sourceCodeEnd":737,"githubUrl":"https://github.com/BoundaryML/baml/blob/bd85ce9dee1463ff04d27efd20531013a4ff46c1/engine/language_client_cffi/src/raw_ptr_wrapper/type_builder/objects.rs#L701-L737","documentation":"Thrown by EnumBuilder::value() when the enum exists in the runtime IR but the requested value name is not among its IR-declared values. The method upserts the value only if the IR already contains it; otherwise it refuses, keeping IR-defined enums consistent.","triggerScenarios":"Calling tb.enum_(\"Color\").value(rt, \"purple\") where Color is defined in .baml but has no 'purple' value, and 'purple' was never added via add_value on the builder.","commonSituations":" typos in value names; accessing a value that was renamed in the schema; reading a value added at runtime on a different TypeBuilder instance; assuming add_value succeeded when it actually failed.","solutions":["Fix the value name to match the .baml enum definition.","Add the value first with EnumBuilder::add_value if it's a dynamic extension.","Check the schema for renames of the enum value.","Verify the same TypeBuilder instance was used for the prior add_value."],"exampleFix":"// before\nlet v = tb.enum(\"Color\").value(rt, \"purpl\")?;\n// after\nlet v = tb.enum(\"Color\").value(rt, \"purple\")?;","handlingStrategy":"validation","validationCode":"let ok = rt.ir.find_enum(\"Color\")\n    .ok()\n    .map(|e| e.find_value(\"purple\").is_some())\n    .unwrap_or(false);\nif !ok { /* add_value first or fix the name */ }","typeGuard":"fn ir_enum_has_value(rt: &BamlRuntime, enum_name: &str, value: &str) -> bool {\n    rt.ir.find_enum(enum_name).map(|e| e.find_value(value).is_some()).unwrap_or(false)\n}","tryCatchPattern":"match enum_builder.value(rt, \"purple\") {\n    Err(e) if e.to_string().contains(\"Enum value not found\") => add_value_then_retry()?,\n    other => other,\n}","preventionTips":["Call add_value before value() for runtime-extended enums.","Check value spelling against the .baml enum block.","Reuse the same TypeBuilder instance for registration and lookup."],"tags":["type-builder","baml","rust","enum-value-lookup"],"backgroundTag":"entity-not-found","analyzedSha":"bd85ce9dee1463ff04d27efd20531013a4ff46c1","analyzedAt":"2026-09-12T03:38:25.718Z","contentChangedAt":"2026-09-12T03:38:25.718Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}