{"record":{"id":"161ce9bf6b32a679","repo":"BoundaryML/baml","slug":"unexpected-type-for-enum-value-builders-t","errorCode":null,"errorMessage":"unexpected type for enum value builders: %T","messagePattern":"unexpected type for enum value builders: %T","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"engine/language_client_go/pkg/rawobjects_enum_builder.go","lineNumber":69,"sourceCode":"\n\ttyp, ok := result.(Type)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"unexpected type for enum type: %T\", result)\n\t}\n\n\treturn typ, nil\n}\n\n// ListValues returns all values in the enum\nfunc (eb *enumBuilder) ListValues() ([]EnumValueBuilder, error) {\n\tresult, err := raw_objects.CallMethod(eb, \"list_values\", nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\trawObjects, ok := result.([]raw_objects.RawPointer)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"unexpected type for enum value builders: %T\", result)\n\t}\n\n\tenumValueBuilders := make([]EnumValueBuilder, len(rawObjects))\n\tfor i, rawObject := range rawObjects {\n\t\tenumValueBuilders[i] = rawObject.(EnumValueBuilder)\n\t}\n\n\treturn enumValueBuilders, nil\n}\n\n// Value gets a specific value from the enum\nfunc (eb *enumBuilder) Value(name string) (EnumValueBuilder, error) {\n\targs := map[string]interface{}{\n\t\t\"name\": name,\n\t}\n\tresult, err := raw_objects.CallMethod(eb, \"value\", args)\n\tif err != nil {\n\t\treturn nil, err","sourceCodeStart":51,"sourceCodeEnd":87,"githubUrl":"https://github.com/BoundaryML/baml/blob/bd85ce9dee1463ff04d27efd20531013a4ff46c1/engine/language_client_go/pkg/rawobjects_enum_builder.go#L51-L87","documentation":"ListValues() asks the runtime for all values of an enum and expects a slice of raw_objects.RawPointer, each of which must also implement EnumValueBuilder. This error fires when the FFI result fails the first assertion to []raw_objects.RawPointer, meaning the runtime returned something other than the expected list of enum-value handles.","triggerScenarios":"Calling ListValues() on an EnumBuilder whose runtime 'list_values' method returns a non-slice or wrong element type — usually a bindings/runtime version skew or a corrupted/invalid enum object handle.","commonSituations":"Go bindings regenerated against a newer runtime than the linked one; enum defined with dynamic type builder where values aren't listable; passing a stale EnumBuilder handle after the runtime context was reset.","solutions":["Rebuild so Go bindings and BAML runtime versions match (go generate / regenerate Go client)","Confirm the enum has static values declared in .baml files before listing","Re-create the enum builder from a fresh BamlRuntime rather than reusing a stale handle","Update the BAML Go package to the latest version"],"exampleFix":"// before\nenumBuilder := runtime.EnsureEnum(\"MyEnum\")\nvalues, err := enumBuilder.ListValues() // error if handle is stale\n// after\nruntime, _ := baml.NewBamlRuntimeFromFiles(\"./baml_src\", nil, nil)\nvalues, err := runtime.EnsureEnum(\"MyEnum\").ListValues()","handlingStrategy":"try-catch","validationCode":"values, err := enumBuilder.ListValues()\nif err != nil && strings.Contains(err.Error(), \"unexpected type\") { /* rebuild bindings */ }","typeGuard":"func asRawSlice(v any) ([]raw_objects.RawPointer, bool) { s, ok := v.([]raw_objects.RawPointer); return s, ok }","tryCatchPattern":"values, err := enumBuilder.ListValues()\nif err != nil {\n    return fmt.Errorf(\"listing enum values: %w\", err) // includes this error wrapped\n}","preventionTips":["Regenerate the Go client whenever the BAML CLI version changes","Create enum builders from a fresh runtime, not stale handles","Declare enum values statically in .baml when you need ListValues"],"tags":["go","type-assertion","baml-runtime","version-mismatch"],"backgroundTag":"type-mismatch","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"}