func (o *Operation) SecuredWith(name string, scopes ...string) *Operation {
	o.Security = append(o.Security, map[string][]string{name: scopes})
	return o
}
SecuredWith adds a security scope to this operation.
package spec
import (
	"encoding/json"
	"github.com/go-openapi/jsonpointer"
	"github.com/go-openapi/swag"
)
type OperationProps struct {
	Description  string                 `json:"description,omitempty"`
	Consumes     []string               `json:"consumes,omitempty"`
	Produces     []string               `json:"produces,omitempty"`
	Schemes      []string               `json:"schemes,omitempty"`  
	Tags         []string               `json:"tags,omitempty"`
	Summary      string                 `json:"summary,omitempty"`
	ExternalDocs *ExternalDocumentation `json:"externalDocs,omitempty"`
	ID           string                 `json:"operationId,omitempty"`
	Deprecated   bool                   `json:"deprecated,omitempty"`
	Security     []map[string][]string  `json:"security,omitempty"`
	Parameters   []Parameter            `json:"parameters,omitempty"`
	Responses    *Responses             `json:"responses,omitempty"`
}
type Operation struct {
	VendorExtensible
	OperationProps
}
func (o *Operation) SuccessResponse() (*Response, int, bool) {
	if o.Responses == nil {
		return nil, 0, false
	}
	for k, v := range o.Responses.StatusCodeResponses {
		if k/100 == 2 {
			return &v, k, true
		}
	}
	return o.Responses.Default, 0, false
}
func (o Operation) JSONLookup(token string) (interface{}, error) {
	if ex, ok := o.Extensions[token]; ok {
		return &ex, nil
	}
	r, _, err := jsonpointer.GetForToken(o.OperationProps, token)
	return r, err
}
func (o *Operation) UnmarshalJSON(data []byte) error {
	if err := json.Unmarshal(data, &o.OperationProps); err != nil {
		return err
	}
	if err := json.Unmarshal(data, &o.VendorExtensible); err != nil {
		return err
	}
	return nil
}
func (o Operation) MarshalJSON() ([]byte, error) {
	b1, err := json.Marshal(o.OperationProps)
	if err != nil {
		return nil, err
	}
	b2, err := json.Marshal(o.VendorExtensible)
	if err != nil {
		return nil, err
	}
	concated := swag.ConcatJSON(b1, b2)
	return concated, nil
}
func NewOperation(id string) *Operation {
	op := new(Operation)
	op.ID = id
	return op
}
func (o *Operation) WithID(id string) *Operation {
	o.ID = id
	return o
}
func (o *Operation) WithDescription(description string) *Operation {
	o.Description = description
	return o
}
func (o *Operation) WithSummary(summary string) *Operation {
	o.Summary = summary
	return o
}
func (o *Operation) WithExternalDocs(description, url string) *Operation {
	if description == "" && url == "" {
		o.ExternalDocs = nil
		return o
	}
	if o.ExternalDocs == nil {
		o.ExternalDocs = &ExternalDocumentation{}
	}
	o.ExternalDocs.Description = description
	o.ExternalDocs.URL = url
	return o
}
func (o *Operation) Deprecate() *Operation {
	o.Deprecated = true
	return o
}
func (o *Operation) Undeprecate() *Operation {
	o.Deprecated = false
	return o
}
func (o *Operation) WithConsumes(mediaTypes ...string) *Operation {
	o.Consumes = append(o.Consumes, mediaTypes...)
	return o
}
func (o *Operation) WithProduces(mediaTypes ...string) *Operation {
	o.Produces = append(o.Produces, mediaTypes...)
	return o
}
func (o *Operation) WithTags(tags ...string) *Operation {
	o.Tags = append(o.Tags, tags...)
	return o
}
func (o *Operation) AddParam(param *Parameter) *Operation {
	if param == nil {
		return o
	}
	for i, p := range o.Parameters {
		if p.Name == param.Name && p.In == param.In {
			params := append(o.Parameters[:i], *param)
			params = append(params, o.Parameters[i+1:]...)
			o.Parameters = params
			return o
		}
	}
	o.Parameters = append(o.Parameters, *param)
	return o
}
func (o *Operation) RemoveParam(name, in string) *Operation {
	for i, p := range o.Parameters {
		if p.Name == name && p.In == name {
			o.Parameters = append(o.Parameters[:i], o.Parameters[i+1:]...)
			return o
		}
	}
	return o
}