mirror of
https://github.com/rocky-linux/peridot.git
synced 2024-11-30 16:46:27 +00:00
243 lines
6.7 KiB
Go
243 lines
6.7 KiB
Go
|
package restful
|
||
|
|
||
|
import "sort"
|
||
|
|
||
|
// Copyright 2013 Ernest Micklei. All rights reserved.
|
||
|
// Use of this source code is governed by a license
|
||
|
// that can be found in the LICENSE file.
|
||
|
|
||
|
const (
|
||
|
// PathParameterKind = indicator of Request parameter type "path"
|
||
|
PathParameterKind = iota
|
||
|
|
||
|
// QueryParameterKind = indicator of Request parameter type "query"
|
||
|
QueryParameterKind
|
||
|
|
||
|
// BodyParameterKind = indicator of Request parameter type "body"
|
||
|
BodyParameterKind
|
||
|
|
||
|
// HeaderParameterKind = indicator of Request parameter type "header"
|
||
|
HeaderParameterKind
|
||
|
|
||
|
// FormParameterKind = indicator of Request parameter type "form"
|
||
|
FormParameterKind
|
||
|
|
||
|
// MultiPartFormParameterKind = indicator of Request parameter type "multipart/form-data"
|
||
|
MultiPartFormParameterKind
|
||
|
|
||
|
// CollectionFormatCSV comma separated values `foo,bar`
|
||
|
CollectionFormatCSV = CollectionFormat("csv")
|
||
|
|
||
|
// CollectionFormatSSV space separated values `foo bar`
|
||
|
CollectionFormatSSV = CollectionFormat("ssv")
|
||
|
|
||
|
// CollectionFormatTSV tab separated values `foo\tbar`
|
||
|
CollectionFormatTSV = CollectionFormat("tsv")
|
||
|
|
||
|
// CollectionFormatPipes pipe separated values `foo|bar`
|
||
|
CollectionFormatPipes = CollectionFormat("pipes")
|
||
|
|
||
|
// CollectionFormatMulti corresponds to multiple parameter instances instead of multiple values for a single
|
||
|
// instance `foo=bar&foo=baz`. This is valid only for QueryParameters and FormParameters
|
||
|
CollectionFormatMulti = CollectionFormat("multi")
|
||
|
)
|
||
|
|
||
|
type CollectionFormat string
|
||
|
|
||
|
func (cf CollectionFormat) String() string {
|
||
|
return string(cf)
|
||
|
}
|
||
|
|
||
|
// Parameter is for documententing the parameter used in a Http Request
|
||
|
// ParameterData kinds are Path,Query and Body
|
||
|
type Parameter struct {
|
||
|
data *ParameterData
|
||
|
}
|
||
|
|
||
|
// ParameterData represents the state of a Parameter.
|
||
|
// It is made public to make it accessible to e.g. the Swagger package.
|
||
|
type ParameterData struct {
|
||
|
ExtensionProperties
|
||
|
Name, Description, DataType, DataFormat string
|
||
|
Kind int
|
||
|
Required bool
|
||
|
// AllowableValues is deprecated. Use PossibleValues instead
|
||
|
AllowableValues map[string]string
|
||
|
PossibleValues []string
|
||
|
AllowMultiple bool
|
||
|
AllowEmptyValue bool
|
||
|
DefaultValue string
|
||
|
CollectionFormat string
|
||
|
Pattern string
|
||
|
Minimum *float64
|
||
|
Maximum *float64
|
||
|
MinLength *int64
|
||
|
MaxLength *int64
|
||
|
MinItems *int64
|
||
|
MaxItems *int64
|
||
|
UniqueItems bool
|
||
|
}
|
||
|
|
||
|
// Data returns the state of the Parameter
|
||
|
func (p *Parameter) Data() ParameterData {
|
||
|
return *p.data
|
||
|
}
|
||
|
|
||
|
// Kind returns the parameter type indicator (see const for valid values)
|
||
|
func (p *Parameter) Kind() int {
|
||
|
return p.data.Kind
|
||
|
}
|
||
|
|
||
|
func (p *Parameter) bePath() *Parameter {
|
||
|
p.data.Kind = PathParameterKind
|
||
|
return p
|
||
|
}
|
||
|
func (p *Parameter) beQuery() *Parameter {
|
||
|
p.data.Kind = QueryParameterKind
|
||
|
return p
|
||
|
}
|
||
|
func (p *Parameter) beBody() *Parameter {
|
||
|
p.data.Kind = BodyParameterKind
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
func (p *Parameter) beHeader() *Parameter {
|
||
|
p.data.Kind = HeaderParameterKind
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
func (p *Parameter) beForm() *Parameter {
|
||
|
p.data.Kind = FormParameterKind
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
func (p *Parameter) beMultiPartForm() *Parameter {
|
||
|
p.data.Kind = MultiPartFormParameterKind
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
// Required sets the required field and returns the receiver
|
||
|
func (p *Parameter) Required(required bool) *Parameter {
|
||
|
p.data.Required = required
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
// AllowMultiple sets the allowMultiple field and returns the receiver
|
||
|
func (p *Parameter) AllowMultiple(multiple bool) *Parameter {
|
||
|
p.data.AllowMultiple = multiple
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
// AddExtension adds or updates a key=value pair to the extension map
|
||
|
func (p *Parameter) AddExtension(key string, value interface{}) *Parameter {
|
||
|
p.data.AddExtension(key, value)
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
// AllowEmptyValue sets the AllowEmptyValue field and returns the receiver
|
||
|
func (p *Parameter) AllowEmptyValue(multiple bool) *Parameter {
|
||
|
p.data.AllowEmptyValue = multiple
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
// AllowableValues is deprecated. Use PossibleValues instead. Both will be set.
|
||
|
func (p *Parameter) AllowableValues(values map[string]string) *Parameter {
|
||
|
p.data.AllowableValues = values
|
||
|
|
||
|
allowableSortedKeys := make([]string, 0, len(values))
|
||
|
for k := range values {
|
||
|
allowableSortedKeys = append(allowableSortedKeys, k)
|
||
|
}
|
||
|
sort.Strings(allowableSortedKeys)
|
||
|
|
||
|
p.data.PossibleValues = make([]string, 0, len(values))
|
||
|
for _, k := range allowableSortedKeys {
|
||
|
p.data.PossibleValues = append(p.data.PossibleValues, values[k])
|
||
|
}
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
// PossibleValues sets the possible values field and returns the receiver
|
||
|
func (p *Parameter) PossibleValues(values []string) *Parameter {
|
||
|
p.data.PossibleValues = values
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
// DataType sets the dataType field and returns the receiver
|
||
|
func (p *Parameter) DataType(typeName string) *Parameter {
|
||
|
p.data.DataType = typeName
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
// DataFormat sets the dataFormat field for Swagger UI
|
||
|
func (p *Parameter) DataFormat(formatName string) *Parameter {
|
||
|
p.data.DataFormat = formatName
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
// DefaultValue sets the default value field and returns the receiver
|
||
|
func (p *Parameter) DefaultValue(stringRepresentation string) *Parameter {
|
||
|
p.data.DefaultValue = stringRepresentation
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
// Description sets the description value field and returns the receiver
|
||
|
func (p *Parameter) Description(doc string) *Parameter {
|
||
|
p.data.Description = doc
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
// CollectionFormat sets the collection format for an array type
|
||
|
func (p *Parameter) CollectionFormat(format CollectionFormat) *Parameter {
|
||
|
p.data.CollectionFormat = format.String()
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
// Pattern sets the pattern field and returns the receiver
|
||
|
func (p *Parameter) Pattern(pattern string) *Parameter {
|
||
|
p.data.Pattern = pattern
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
// Minimum sets the minimum field and returns the receiver
|
||
|
func (p *Parameter) Minimum(minimum float64) *Parameter {
|
||
|
p.data.Minimum = &minimum
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
// Maximum sets the maximum field and returns the receiver
|
||
|
func (p *Parameter) Maximum(maximum float64) *Parameter {
|
||
|
p.data.Maximum = &maximum
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
// MinLength sets the minLength field and returns the receiver
|
||
|
func (p *Parameter) MinLength(minLength int64) *Parameter {
|
||
|
p.data.MinLength = &minLength
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
// MaxLength sets the maxLength field and returns the receiver
|
||
|
func (p *Parameter) MaxLength(maxLength int64) *Parameter {
|
||
|
p.data.MaxLength = &maxLength
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
// MinItems sets the minItems field and returns the receiver
|
||
|
func (p *Parameter) MinItems(minItems int64) *Parameter {
|
||
|
p.data.MinItems = &minItems
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
// MaxItems sets the maxItems field and returns the receiver
|
||
|
func (p *Parameter) MaxItems(maxItems int64) *Parameter {
|
||
|
p.data.MaxItems = &maxItems
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
// UniqueItems sets the uniqueItems field and returns the receiver
|
||
|
func (p *Parameter) UniqueItems(uniqueItems bool) *Parameter {
|
||
|
p.data.UniqueItems = uniqueItems
|
||
|
return p
|
||
|
}
|