package schema import ( "errors" "reflect" "golang.org/x/exp/slices" "github.com/sashabaranov/go-openai/jsonschema" ) type enum struct { basic values []string } func (e enum) SchemaType() jsonschema.DataType { return jsonschema.String } func (e enum) Definition() jsonschema.Definition { def := e.basic.Definition() def.Enum = e.values return def } func (e enum) FromAny(val any) (reflect.Value, error) { v := reflect.ValueOf(val) if v.Kind() != reflect.String { return reflect.Value{}, errors.New("expected string, got " + v.Kind().String()) } s := v.String() if !slices.Contains(e.values, s) { return reflect.Value{}, errors.New("value " + s + " not in enum") } return v, nil } func (e enum) SetValueOnField(obj reflect.Value, val reflect.Value) { if !e.required { val = val.Addr() } obj.Field(e.index).Set(val) }