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