mirror of
https://github.com/LukeHagar/libopenapi.git
synced 2025-12-10 04:20:24 +00:00
Enums in Schema are now interface{} types in datamodel #1
Addressing issues #1, Enums can be anything and should not be consideded plain strings.
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
package base
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/pb33f/libopenapi/datamodel/high"
|
||||
lowmodel "github.com/pb33f/libopenapi/datamodel/low"
|
||||
"github.com/pb33f/libopenapi/datamodel/low/base"
|
||||
@@ -69,7 +70,7 @@ type Schema struct {
|
||||
MaxProperties *int64
|
||||
MinProperties *int64
|
||||
Required []string
|
||||
Enum []string
|
||||
Enum []any
|
||||
AdditionalProperties any
|
||||
Description string
|
||||
Default any
|
||||
@@ -171,9 +172,9 @@ func NewSchema(schema *base.Schema) *Schema {
|
||||
}
|
||||
s.Required = req
|
||||
|
||||
var enum []string
|
||||
var enum []any
|
||||
for i := range schema.Enum.Value {
|
||||
enum = append(enum, schema.Enum.Value[i].Value)
|
||||
enum = append(enum, fmt.Sprint(schema.Enum.Value[i].Value))
|
||||
}
|
||||
s.Enum = enum
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@ type Schema struct {
|
||||
MaxProperties low.NodeReference[int64]
|
||||
MinProperties low.NodeReference[int64]
|
||||
Required low.NodeReference[[]low.ValueReference[string]]
|
||||
Enum low.NodeReference[[]low.ValueReference[string]]
|
||||
Enum low.NodeReference[[]low.ValueReference[any]]
|
||||
Not low.NodeReference[[]low.ValueReference[*SchemaProxy]]
|
||||
Items low.NodeReference[[]low.ValueReference[*SchemaProxy]]
|
||||
Properties low.NodeReference[map[low.KeyReference[string]]low.ValueReference[*SchemaProxy]]
|
||||
@@ -143,7 +143,7 @@ func (s *Schema) Hash() [32]byte {
|
||||
d = append(d, s.Required.Value[i].Value)
|
||||
}
|
||||
for i := range s.Enum.Value {
|
||||
d = append(d, s.Enum.Value[i].Value)
|
||||
d = append(d, fmt.Sprint(s.Enum.Value[i].Value))
|
||||
}
|
||||
propertyKeys := make([]string, 0, len(s.Properties.Value))
|
||||
for i := range s.Properties.Value {
|
||||
|
||||
@@ -424,6 +424,26 @@ func SetField(field reflect.Value, valueNode *yaml.Node, keyNode *yaml.Node) err
|
||||
}
|
||||
}
|
||||
}
|
||||
case reflect.TypeOf(NodeReference[[]ValueReference[any]]{}):
|
||||
if valueNode != nil {
|
||||
if utils.IsNodeArray(valueNode) {
|
||||
if field.CanSet() {
|
||||
var items []ValueReference[any]
|
||||
for _, sliceItem := range valueNode.Content {
|
||||
items = append(items, ValueReference[any]{
|
||||
Value: sliceItem.Value,
|
||||
ValueNode: sliceItem,
|
||||
})
|
||||
}
|
||||
n := NodeReference[[]ValueReference[any]]{
|
||||
Value: items,
|
||||
KeyNode: keyNode,
|
||||
ValueNode: valueNode,
|
||||
}
|
||||
field.Set(reflect.ValueOf(n))
|
||||
}
|
||||
}
|
||||
}
|
||||
default:
|
||||
// we want to ignore everything else, each model handles its own complex types.
|
||||
break
|
||||
|
||||
@@ -683,10 +683,10 @@ func checkSchemaPropertyChanges(
|
||||
j = make(map[string]int)
|
||||
k = make(map[string]int)
|
||||
for i := range lSchema.Enum.Value {
|
||||
j[lSchema.Enum.Value[i].Value] = i
|
||||
j[fmt.Sprint(lSchema.Enum.Value[i].Value)] = i
|
||||
}
|
||||
for i := range rSchema.Enum.Value {
|
||||
k[rSchema.Enum.Value[i].Value] = i
|
||||
k[fmt.Sprint(rSchema.Enum.Value[i].Value)] = i
|
||||
}
|
||||
for g := range k {
|
||||
if _, ok := j[g]; !ok {
|
||||
|
||||
Reference in New Issue
Block a user