{"record":{"id":"05be22691c2e9973","repo":"BoundaryML/baml","slug":"enum-with-name-name-does-not-exist","errorCode":null,"errorMessage":"Enum with name {name} does not exist","messagePattern":"Enum with name (.+?) does not exist","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"engine/language_client_cffi/src/raw_ptr_wrapper/type_builder/objects.rs","lineNumber":123,"sourceCode":"    }\n\n    pub fn r#enum(&self, rt: &BamlRuntime, name: &str) -> anyhow::Result<EnumBuilder> {\n        match rt.ir.find_enum(name) {\n            Ok(enm) => {\n                let _ = self.type_builder.upsert_enum(name);\n                let builder = EnumBuilder::new(self.type_builder.clone(), name.to_string());\n                if !enm.item.attributes.dynamic() {\n                    return Ok(builder.mode(NodeRW::ReadOnly));\n                }\n                Ok(builder.mode(NodeRW::ReadWrite))\n            }\n            Err(_) => match self.type_builder.maybe_get_enum(name) {\n                Some(_) => Ok(EnumBuilder::new(\n                    self.type_builder.clone(),\n                    name.to_string(),\n                )),\n                None => {\n                    anyhow::bail!(\"Enum with name {name} does not exist\");\n                }\n            },\n        }\n    }\n\n    pub fn add_baml(&self, baml: &str, rt: &BamlRuntime) -> anyhow::Result<()> {\n        self.type_builder.add_baml(baml, rt)\n    }\n\n    pub fn list_enums(&self, rt: &BamlRuntime) -> Vec<EnumBuilder> {\n        let ir = &rt.ir;\n        let enums = ir.walk_enums();\n        enums\n            .map(|enm| enm.name().to_string())\n            .chain(self.type_builder.list_enums())\n            .collect::<indexmap::IndexSet<_>>()\n            .into_iter()\n            .map(|name| EnumBuilder::new(self.type_builder.clone(), name))","sourceCodeStart":105,"sourceCodeEnd":141,"githubUrl":"https://github.com/BoundaryML/baml/blob/bd85ce9dee1463ff04d27efd20531013a4ff46c1/engine/language_client_cffi/src/raw_ptr_wrapper/type_builder/objects.rs#L105-L141","documentation":"TypeBuilder::r#enum looks up an existing enum builder by name. If the enum exists in the runtime IR but was not registered on this TypeBuilder (maybe_get_enum returns None), or does not exist at all, the lookup bails with this error.","triggerScenarios":"Calling tb.r#enum(rt, \"Name\") for an enum name that is neither in the runtime IR nor registered on this TypeBuilder (typo or never added via add_enum).","commonSituations":"Typo in enum name; calling .r#enum() before add_enum(); using a different TypeBuilder instance than the one the enum was added to.","solutions":["Add the enum first with tb.add_enum(rt, name) before lookup","Verify the enum name matches the BAML declaration exactly","Use the same TypeBuilder instance for add and lookup"],"exampleFix":"// before\nlet eb = tb.r#enum(rt, \"Colr\")?; // typo -> does not exist\n// after\nlet eb = match tb.r#enum(rt, \"Color\") {\n    Ok(eb) => eb,\n    Err(_) => tb.add_enum(rt, \"Color\")?,\n};","handlingStrategy":"try-catch","validationCode":"# verify name against known enums\nassert \"Color\" in known_enum_names, f\"enum 'Color' not defined\"","typeGuard":null,"tryCatchPattern":"try:\n    eb = tb.enum(name)\nexcept Exception as e:\n    if \"does not exist\" in str(e):\n        eb = tb.add_enum(rt, name)\n    else:\n        raise","preventionTips":["Call add_enum before any lookup of a dynamic enum","Verify enum names against the compiled BAML IR","Keep TypeBuilder construction and lookup in the same scope"],"tags":["type-builder","enum","not-found","schema"],"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-14T16:17:12.679Z"}