mirror of
https://github.com/LukeHagar/libopenapi.git
synced 2025-12-10 12:37:48 +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
|
package base
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"github.com/pb33f/libopenapi/datamodel/high"
|
"github.com/pb33f/libopenapi/datamodel/high"
|
||||||
lowmodel "github.com/pb33f/libopenapi/datamodel/low"
|
lowmodel "github.com/pb33f/libopenapi/datamodel/low"
|
||||||
"github.com/pb33f/libopenapi/datamodel/low/base"
|
"github.com/pb33f/libopenapi/datamodel/low/base"
|
||||||
@@ -69,7 +70,7 @@ type Schema struct {
|
|||||||
MaxProperties *int64
|
MaxProperties *int64
|
||||||
MinProperties *int64
|
MinProperties *int64
|
||||||
Required []string
|
Required []string
|
||||||
Enum []string
|
Enum []any
|
||||||
AdditionalProperties any
|
AdditionalProperties any
|
||||||
Description string
|
Description string
|
||||||
Default any
|
Default any
|
||||||
@@ -171,9 +172,9 @@ func NewSchema(schema *base.Schema) *Schema {
|
|||||||
}
|
}
|
||||||
s.Required = req
|
s.Required = req
|
||||||
|
|
||||||
var enum []string
|
var enum []any
|
||||||
for i := range schema.Enum.Value {
|
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
|
s.Enum = enum
|
||||||
|
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ type Schema struct {
|
|||||||
MaxProperties low.NodeReference[int64]
|
MaxProperties low.NodeReference[int64]
|
||||||
MinProperties low.NodeReference[int64]
|
MinProperties low.NodeReference[int64]
|
||||||
Required low.NodeReference[[]low.ValueReference[string]]
|
Required low.NodeReference[[]low.ValueReference[string]]
|
||||||
Enum low.NodeReference[[]low.ValueReference[string]]
|
Enum low.NodeReference[[]low.ValueReference[any]]
|
||||||
Not low.NodeReference[[]low.ValueReference[*SchemaProxy]]
|
Not low.NodeReference[[]low.ValueReference[*SchemaProxy]]
|
||||||
Items low.NodeReference[[]low.ValueReference[*SchemaProxy]]
|
Items low.NodeReference[[]low.ValueReference[*SchemaProxy]]
|
||||||
Properties low.NodeReference[map[low.KeyReference[string]]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)
|
d = append(d, s.Required.Value[i].Value)
|
||||||
}
|
}
|
||||||
for i := range s.Enum.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))
|
propertyKeys := make([]string, 0, len(s.Properties.Value))
|
||||||
for i := range 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:
|
default:
|
||||||
// we want to ignore everything else, each model handles its own complex types.
|
// we want to ignore everything else, each model handles its own complex types.
|
||||||
break
|
break
|
||||||
|
|||||||
@@ -683,10 +683,10 @@ func checkSchemaPropertyChanges(
|
|||||||
j = make(map[string]int)
|
j = make(map[string]int)
|
||||||
k = make(map[string]int)
|
k = make(map[string]int)
|
||||||
for i := range lSchema.Enum.Value {
|
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 {
|
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 {
|
for g := range k {
|
||||||
if _, ok := j[g]; !ok {
|
if _, ok := j[g]; !ok {
|
||||||
|
|||||||
Reference in New Issue
Block a user