refactor to go-restful
This commit is contained in:
104
vendor/github.com/emicklei/go-restful-openapi/property_ext.go
generated
vendored
Normal file
104
vendor/github.com/emicklei/go-restful-openapi/property_ext.go
generated
vendored
Normal file
@ -0,0 +1,104 @@
|
||||
package restfulspec
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/go-openapi/spec"
|
||||
)
|
||||
|
||||
func setDescription(prop *spec.Schema, field reflect.StructField) {
|
||||
if tag := field.Tag.Get("description"); tag != "" {
|
||||
prop.Description = tag
|
||||
}
|
||||
}
|
||||
|
||||
func setDefaultValue(prop *spec.Schema, field reflect.StructField) {
|
||||
if tag := field.Tag.Get("default"); tag != "" {
|
||||
prop.Default = stringAutoType(tag)
|
||||
}
|
||||
}
|
||||
|
||||
func setEnumValues(prop *spec.Schema, field reflect.StructField) {
|
||||
// We use | to separate the enum values. This value is chosen
|
||||
// since its unlikely to be useful in actual enumeration values.
|
||||
if tag := field.Tag.Get("enum"); tag != "" {
|
||||
enums := []interface{}{}
|
||||
for _, s := range strings.Split(tag, "|") {
|
||||
enums = append(enums, s)
|
||||
}
|
||||
prop.Enum = enums
|
||||
}
|
||||
}
|
||||
|
||||
func setMaximum(prop *spec.Schema, field reflect.StructField) {
|
||||
if tag := field.Tag.Get("maximum"); tag != "" {
|
||||
value, err := strconv.ParseFloat(tag, 64)
|
||||
if err == nil {
|
||||
prop.Maximum = &value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func setMinimum(prop *spec.Schema, field reflect.StructField) {
|
||||
if tag := field.Tag.Get("minimum"); tag != "" {
|
||||
value, err := strconv.ParseFloat(tag, 64)
|
||||
if err == nil {
|
||||
prop.Minimum = &value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func setType(prop *spec.Schema, field reflect.StructField) {
|
||||
if tag := field.Tag.Get("type"); tag != "" {
|
||||
// Check if the first two characters of the type tag are
|
||||
// intended to emulate slice/array behaviour.
|
||||
//
|
||||
// If type is intended to be a slice/array then add the
|
||||
// overriden type to the array item instead of the main property
|
||||
if len(tag) > 2 && tag[0:2] == "[]" {
|
||||
pType := "array"
|
||||
prop.Type = []string{pType}
|
||||
prop.Items = &spec.SchemaOrArray{
|
||||
Schema: &spec.Schema{},
|
||||
}
|
||||
iType := tag[2:]
|
||||
prop.Items.Schema.Type = []string{iType}
|
||||
return
|
||||
}
|
||||
|
||||
prop.Type = []string{tag}
|
||||
}
|
||||
}
|
||||
|
||||
func setUniqueItems(prop *spec.Schema, field reflect.StructField) {
|
||||
tag := field.Tag.Get("unique")
|
||||
switch tag {
|
||||
case "true":
|
||||
prop.UniqueItems = true
|
||||
case "false":
|
||||
prop.UniqueItems = false
|
||||
}
|
||||
}
|
||||
|
||||
func setReadOnly(prop *spec.Schema, field reflect.StructField) {
|
||||
tag := field.Tag.Get("readOnly")
|
||||
switch tag {
|
||||
case "true":
|
||||
prop.ReadOnly = true
|
||||
case "false":
|
||||
prop.ReadOnly = false
|
||||
}
|
||||
}
|
||||
|
||||
func setPropertyMetadata(prop *spec.Schema, field reflect.StructField) {
|
||||
setDescription(prop, field)
|
||||
setDefaultValue(prop, field)
|
||||
setEnumValues(prop, field)
|
||||
setMinimum(prop, field)
|
||||
setMaximum(prop, field)
|
||||
setUniqueItems(prop, field)
|
||||
setType(prop, field)
|
||||
setReadOnly(prop, field)
|
||||
}
|
Reference in New Issue
Block a user