| 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) |
| } |