mirror of https://github.com/docker/cli.git
82 lines
1.9 KiB
Go
82 lines
1.9 KiB
Go
package swagger
|
|
|
|
import (
|
|
"reflect"
|
|
"strings"
|
|
)
|
|
|
|
func (prop *ModelProperty) setDescription(field reflect.StructField) {
|
|
if tag := field.Tag.Get("description"); tag != "" {
|
|
prop.Description = tag
|
|
}
|
|
}
|
|
|
|
func (prop *ModelProperty) setDefaultValue(field reflect.StructField) {
|
|
if tag := field.Tag.Get("default"); tag != "" {
|
|
prop.DefaultValue = Special(tag)
|
|
}
|
|
}
|
|
|
|
func (prop *ModelProperty) setEnumValues(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 != "" {
|
|
prop.Enum = strings.Split(tag, "|")
|
|
}
|
|
}
|
|
|
|
func (prop *ModelProperty) setMaximum(field reflect.StructField) {
|
|
if tag := field.Tag.Get("maximum"); tag != "" {
|
|
prop.Maximum = tag
|
|
}
|
|
}
|
|
|
|
func (prop *ModelProperty) setType(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 = &pType
|
|
prop.Items = new(Item)
|
|
|
|
iType := tag[2:]
|
|
prop.Items.Type = &iType
|
|
return
|
|
}
|
|
|
|
prop.Type = &tag
|
|
}
|
|
}
|
|
|
|
func (prop *ModelProperty) setMinimum(field reflect.StructField) {
|
|
if tag := field.Tag.Get("minimum"); tag != "" {
|
|
prop.Minimum = tag
|
|
}
|
|
}
|
|
|
|
func (prop *ModelProperty) setUniqueItems(field reflect.StructField) {
|
|
tag := field.Tag.Get("unique")
|
|
switch tag {
|
|
case "true":
|
|
v := true
|
|
prop.UniqueItems = &v
|
|
case "false":
|
|
v := false
|
|
prop.UniqueItems = &v
|
|
}
|
|
}
|
|
|
|
func (prop *ModelProperty) setPropertyMetadata(field reflect.StructField) {
|
|
prop.setDescription(field)
|
|
prop.setEnumValues(field)
|
|
prop.setMinimum(field)
|
|
prop.setMaximum(field)
|
|
prop.setUniqueItems(field)
|
|
prop.setDefaultValue(field)
|
|
prop.setType(field)
|
|
}
|