[#1] Add search route

Signed-off-by: Denis Kirillov <denis@nspcc.ru>
This commit is contained in:
Denis Kirillov 2022-04-18 11:30:34 +03:00 committed by Alex Vanin
parent c7c570fd10
commit dc1926f9c6
18 changed files with 1837 additions and 126 deletions

View file

@ -368,23 +368,7 @@ func init() {
"200": {
"description": "Address of uploaded objects",
"schema": {
"type": "object",
"required": [
"objectId",
"containerId"
],
"properties": {
"containerId": {
"type": "string"
},
"objectId": {
"type": "string"
}
},
"example": {
"containerId": "5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv",
"objectId": "8N3o7Dtr6T1xteCt6eRwhpmJ7JhME58Hyu1dvaswuTDd"
}
"$ref": "#/definitions/Address"
}
},
"400": {
@ -407,6 +391,67 @@ func init() {
}
]
},
"/objects/{containerId}/search": {
"post": {
"summary": "Search objects by filters",
"operationId": "searchObjects",
"parameters": [
{
"type": "integer",
"default": 0,
"description": "The number of containers to skip before starting to collect the result set.",
"name": "offset",
"in": "query"
},
{
"maximum": 10000,
"minimum": 1,
"type": "integer",
"default": 100,
"description": "The numbers of containers to return.",
"name": "limit",
"in": "query"
},
{
"description": "Filters to search objects",
"name": "searchFilters",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/SearchFilters"
}
}
],
"responses": {
"200": {
"description": "List of objects",
"schema": {
"$ref": "#/definitions/ObjectList"
}
},
"400": {
"description": "Bad request",
"schema": {
"$ref": "#/definitions/Error"
}
}
}
},
"parameters": [
{
"$ref": "#/parameters/signatureParam"
},
{
"$ref": "#/parameters/signatureKeyParam"
},
{
"$ref": "#/parameters/signatureScheme"
},
{
"$ref": "#/parameters/containerId"
}
]
},
"/objects/{containerId}/{objectId}": {
"get": {
"summary": "Get object info by address and",
@ -468,6 +513,25 @@ func init() {
"DENY"
]
},
"Address": {
"type": "object",
"required": [
"containerId",
"objectId"
],
"properties": {
"containerId": {
"type": "string"
},
"objectId": {
"type": "string"
}
},
"example": {
"containerId": "5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv",
"objectId": "8N3o7Dtr6T1xteCt6eRwhpmJ7JhME58Hyu1dvaswuTDd"
}
},
"Attribute": {
"type": "object",
"required": [
@ -645,6 +709,20 @@ func init() {
"STRING_NOT_EQUAL"
]
},
"ObjectBaseInfo": {
"type": "object",
"required": [
"address"
],
"properties": {
"address": {
"$ref": "#/definitions/Address"
},
"name": {
"type": "string"
}
}
},
"ObjectInfo": {
"type": "object",
"required": [
@ -686,6 +764,24 @@ func init() {
"ownerId": "NbUgTSFvPmsRxmGeWpuuGeJUoRoi6PErcM"
}
},
"ObjectList": {
"type": "object",
"required": [
"size",
"objects"
],
"properties": {
"objects": {
"type": "array",
"items": {
"$ref": "#/definitions/ObjectBaseInfo"
}
},
"size": {
"type": "integer"
}
}
},
"Operation": {
"type": "string",
"enum": [
@ -763,6 +859,48 @@ func init() {
}
}
},
"SearchFilter": {
"type": "object",
"required": [
"key",
"value",
"match"
],
"properties": {
"key": {
"type": "string"
},
"match": {
"$ref": "#/definitions/SearchMatch"
},
"value": {
"type": "string"
}
}
},
"SearchFilters": {
"type": "object",
"required": [
"filters"
],
"properties": {
"filters": {
"type": "array",
"items": {
"$ref": "#/definitions/SearchFilter"
}
}
}
},
"SearchMatch": {
"type": "string",
"enum": [
"MatchStringEqual",
"MatchStringNotEqual",
"MatchNotPresent",
"MatchCommonPrefix"
]
},
"Target": {
"type": "object",
"required": [
@ -1279,23 +1417,7 @@ func init() {
"200": {
"description": "Address of uploaded objects",
"schema": {
"type": "object",
"required": [
"objectId",
"containerId"
],
"properties": {
"containerId": {
"type": "string"
},
"objectId": {
"type": "string"
}
},
"example": {
"containerId": "5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv",
"objectId": "8N3o7Dtr6T1xteCt6eRwhpmJ7JhME58Hyu1dvaswuTDd"
}
"$ref": "#/definitions/Address"
}
},
"400": {
@ -1330,6 +1452,84 @@ func init() {
}
]
},
"/objects/{containerId}/search": {
"post": {
"summary": "Search objects by filters",
"operationId": "searchObjects",
"parameters": [
{
"minimum": 0,
"type": "integer",
"default": 0,
"description": "The number of containers to skip before starting to collect the result set.",
"name": "offset",
"in": "query"
},
{
"maximum": 10000,
"minimum": 1,
"type": "integer",
"default": 100,
"description": "The numbers of containers to return.",
"name": "limit",
"in": "query"
},
{
"description": "Filters to search objects",
"name": "searchFilters",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/SearchFilters"
}
}
],
"responses": {
"200": {
"description": "List of objects",
"schema": {
"$ref": "#/definitions/ObjectList"
}
},
"400": {
"description": "Bad request",
"schema": {
"$ref": "#/definitions/Error"
}
}
}
},
"parameters": [
{
"type": "string",
"description": "Base64 encoded signature for bearer token",
"name": "X-Bearer-Signature",
"in": "header",
"required": true
},
{
"type": "string",
"description": "Hex encoded the public part of the key that signed the bearer token",
"name": "X-Bearer-Signature-Key",
"in": "header",
"required": true
},
{
"type": "boolean",
"default": false,
"description": "Use wallect connect signature scheme or not",
"name": "walletConnect",
"in": "query"
},
{
"type": "string",
"description": "Base58 encoded container id",
"name": "containerId",
"in": "path",
"required": true
}
]
},
"/objects/{containerId}/{objectId}": {
"get": {
"summary": "Get object info by address and",
@ -1411,6 +1611,25 @@ func init() {
"DENY"
]
},
"Address": {
"type": "object",
"required": [
"containerId",
"objectId"
],
"properties": {
"containerId": {
"type": "string"
},
"objectId": {
"type": "string"
}
},
"example": {
"containerId": "5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv",
"objectId": "8N3o7Dtr6T1xteCt6eRwhpmJ7JhME58Hyu1dvaswuTDd"
}
},
"Attribute": {
"type": "object",
"required": [
@ -1588,6 +1807,20 @@ func init() {
"STRING_NOT_EQUAL"
]
},
"ObjectBaseInfo": {
"type": "object",
"required": [
"address"
],
"properties": {
"address": {
"$ref": "#/definitions/Address"
},
"name": {
"type": "string"
}
}
},
"ObjectInfo": {
"type": "object",
"required": [
@ -1629,6 +1862,24 @@ func init() {
"ownerId": "NbUgTSFvPmsRxmGeWpuuGeJUoRoi6PErcM"
}
},
"ObjectList": {
"type": "object",
"required": [
"size",
"objects"
],
"properties": {
"objects": {
"type": "array",
"items": {
"$ref": "#/definitions/ObjectBaseInfo"
}
},
"size": {
"type": "integer"
}
}
},
"Operation": {
"type": "string",
"enum": [
@ -1706,6 +1957,48 @@ func init() {
}
}
},
"SearchFilter": {
"type": "object",
"required": [
"key",
"value",
"match"
],
"properties": {
"key": {
"type": "string"
},
"match": {
"$ref": "#/definitions/SearchMatch"
},
"value": {
"type": "string"
}
}
},
"SearchFilters": {
"type": "object",
"required": [
"filters"
],
"properties": {
"filters": {
"type": "array",
"items": {
"$ref": "#/definitions/SearchFilter"
}
}
}
},
"SearchMatch": {
"type": "string",
"enum": [
"MatchStringEqual",
"MatchStringNotEqual",
"MatchNotPresent",
"MatchCommonPrefix"
]
},
"Target": {
"type": "object",
"required": [

View file

@ -74,6 +74,9 @@ func NewNeofsRestGwAPI(spec *loads.Document) *NeofsRestGwAPI {
PutObjectHandler: PutObjectHandlerFunc(func(params PutObjectParams, principal *models.Principal) middleware.Responder {
return middleware.NotImplemented("operation PutObject has not yet been implemented")
}),
SearchObjectsHandler: SearchObjectsHandlerFunc(func(params SearchObjectsParams, principal *models.Principal) middleware.Responder {
return middleware.NotImplemented("operation SearchObjects has not yet been implemented")
}),
// Applies when the "Authorization" header is set
BearerAuthAuth: func(token string) (*models.Principal, error) {
@ -144,6 +147,8 @@ type NeofsRestGwAPI struct {
PutContainerEACLHandler PutContainerEACLHandler
// PutObjectHandler sets the operation handler for the put object operation
PutObjectHandler PutObjectHandler
// SearchObjectsHandler sets the operation handler for the search objects operation
SearchObjectsHandler SearchObjectsHandler
// ServeError is called when an error is received, there is a default handler
// but you can set your own with this
@ -255,6 +260,9 @@ func (o *NeofsRestGwAPI) Validate() error {
if o.PutObjectHandler == nil {
unregistered = append(unregistered, "PutObjectHandler")
}
if o.SearchObjectsHandler == nil {
unregistered = append(unregistered, "SearchObjectsHandler")
}
if len(unregistered) > 0 {
return fmt.Errorf("missing registration: %s", strings.Join(unregistered, ", "))
@ -394,6 +402,10 @@ func (o *NeofsRestGwAPI) initHandlerCache() {
o.handlers["PUT"] = make(map[string]http.Handler)
}
o.handlers["PUT"]["/objects"] = NewPutObject(o.context, o.PutObjectHandler)
if o.handlers["POST"] == nil {
o.handlers["POST"] = make(map[string]http.Handler)
}
o.handlers["POST"]["/objects/{containerId}/search"] = NewSearchObjects(o.context, o.SearchObjectsHandler)
}
// Serve creates a http handler to serve the API over HTTP

View file

@ -151,77 +151,3 @@ func (o *PutObjectBody) UnmarshalBinary(b []byte) error {
*o = res
return nil
}
// PutObjectOKBody put object o k body
// Example: {"containerId":"5HZTn5qkRnmgSz9gSrw22CEdPPk6nQhkwf2Mgzyvkikv","objectId":"8N3o7Dtr6T1xteCt6eRwhpmJ7JhME58Hyu1dvaswuTDd"}
//
// swagger:model PutObjectOKBody
type PutObjectOKBody struct {
// container Id
// Required: true
ContainerID *string `json:"containerId"`
// object Id
// Required: true
ObjectID *string `json:"objectId"`
}
// Validate validates this put object o k body
func (o *PutObjectOKBody) Validate(formats strfmt.Registry) error {
var res []error
if err := o.validateContainerID(formats); err != nil {
res = append(res, err)
}
if err := o.validateObjectID(formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
func (o *PutObjectOKBody) validateContainerID(formats strfmt.Registry) error {
if err := validate.Required("putObjectOK"+"."+"containerId", "body", o.ContainerID); err != nil {
return err
}
return nil
}
func (o *PutObjectOKBody) validateObjectID(formats strfmt.Registry) error {
if err := validate.Required("putObjectOK"+"."+"objectId", "body", o.ObjectID); err != nil {
return err
}
return nil
}
// ContextValidate validates this put object o k body based on context it is used
func (o *PutObjectOKBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
return nil
}
// MarshalBinary interface implementation
func (o *PutObjectOKBody) MarshalBinary() ([]byte, error) {
if o == nil {
return nil, nil
}
return swag.WriteJSON(o)
}
// UnmarshalBinary interface implementation
func (o *PutObjectOKBody) UnmarshalBinary(b []byte) error {
var res PutObjectOKBody
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*o = res
return nil
}

View file

@ -25,7 +25,7 @@ type PutObjectOK struct {
/*
In: Body
*/
Payload *PutObjectOKBody `json:"body,omitempty"`
Payload *models.Address `json:"body,omitempty"`
}
// NewPutObjectOK creates PutObjectOK with default headers values
@ -35,13 +35,13 @@ func NewPutObjectOK() *PutObjectOK {
}
// WithPayload adds the payload to the put object o k response
func (o *PutObjectOK) WithPayload(payload *PutObjectOKBody) *PutObjectOK {
func (o *PutObjectOK) WithPayload(payload *models.Address) *PutObjectOK {
o.Payload = payload
return o
}
// SetPayload sets the payload to the put object o k response
func (o *PutObjectOK) SetPayload(payload *PutObjectOKBody) {
func (o *PutObjectOK) SetPayload(payload *models.Address) {
o.Payload = payload
}

View file

@ -0,0 +1,71 @@
// Code generated by go-swagger; DO NOT EDIT.
package operations
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the generate command
import (
"net/http"
"github.com/go-openapi/runtime/middleware"
"github.com/nspcc-dev/neofs-rest-gw/gen/models"
)
// SearchObjectsHandlerFunc turns a function with the right signature into a search objects handler
type SearchObjectsHandlerFunc func(SearchObjectsParams, *models.Principal) middleware.Responder
// Handle executing the request and returning a response
func (fn SearchObjectsHandlerFunc) Handle(params SearchObjectsParams, principal *models.Principal) middleware.Responder {
return fn(params, principal)
}
// SearchObjectsHandler interface for that can handle valid search objects params
type SearchObjectsHandler interface {
Handle(SearchObjectsParams, *models.Principal) middleware.Responder
}
// NewSearchObjects creates a new http.Handler for the search objects operation
func NewSearchObjects(ctx *middleware.Context, handler SearchObjectsHandler) *SearchObjects {
return &SearchObjects{Context: ctx, Handler: handler}
}
/* SearchObjects swagger:route POST /objects/{containerId}/search searchObjects
Search objects by filters
*/
type SearchObjects struct {
Context *middleware.Context
Handler SearchObjectsHandler
}
func (o *SearchObjects) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
route, rCtx, _ := o.Context.RouteInfo(r)
if rCtx != nil {
*r = *rCtx
}
var Params = NewSearchObjectsParams()
uprinc, aCtx, err := o.Context.Authorize(r, route)
if err != nil {
o.Context.Respond(rw, r, route.Produces, route, err)
return
}
if aCtx != nil {
*r = *aCtx
}
var principal *models.Principal
if uprinc != nil {
principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise
}
if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params
o.Context.Respond(rw, r, route.Produces, route, err)
return
}
res := o.Handler.Handle(Params, principal) // actually handle the request
o.Context.Respond(rw, r, route.Produces, route, res)
}

View file

@ -0,0 +1,322 @@
// Code generated by go-swagger; DO NOT EDIT.
package operations
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"io"
"net/http"
"github.com/go-openapi/errors"
"github.com/go-openapi/runtime"
"github.com/go-openapi/runtime/middleware"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
"github.com/go-openapi/validate"
"github.com/nspcc-dev/neofs-rest-gw/gen/models"
)
// NewSearchObjectsParams creates a new SearchObjectsParams object
// with the default values initialized.
func NewSearchObjectsParams() SearchObjectsParams {
var (
// initialize parameters with default values
limitDefault = int64(100)
offsetDefault = int64(0)
walletConnectDefault = bool(false)
)
return SearchObjectsParams{
Limit: &limitDefault,
Offset: &offsetDefault,
WalletConnect: &walletConnectDefault,
}
}
// SearchObjectsParams contains all the bound params for the search objects operation
// typically these are obtained from a http.Request
//
// swagger:parameters searchObjects
type SearchObjectsParams struct {
// HTTP Request Object
HTTPRequest *http.Request `json:"-"`
/*Base64 encoded signature for bearer token
Required: true
In: header
*/
XBearerSignature string
/*Hex encoded the public part of the key that signed the bearer token
Required: true
In: header
*/
XBearerSignatureKey string
/*Base58 encoded container id
Required: true
In: path
*/
ContainerID string
/*The numbers of containers to return.
Maximum: 10000
Minimum: 1
In: query
Default: 100
*/
Limit *int64
/*The number of containers to skip before starting to collect the result set.
Minimum: 0
In: query
Default: 0
*/
Offset *int64
/*Filters to search objects
Required: true
In: body
*/
SearchFilters *models.SearchFilters
/*Use wallect connect signature scheme or not
In: query
Default: false
*/
WalletConnect *bool
}
// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface
// for simple values it will use straight method calls.
//
// To ensure default values, the struct must have been initialized with NewSearchObjectsParams() beforehand.
func (o *SearchObjectsParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error {
var res []error
o.HTTPRequest = r
qs := runtime.Values(r.URL.Query())
if err := o.bindXBearerSignature(r.Header[http.CanonicalHeaderKey("X-Bearer-Signature")], true, route.Formats); err != nil {
res = append(res, err)
}
if err := o.bindXBearerSignatureKey(r.Header[http.CanonicalHeaderKey("X-Bearer-Signature-Key")], true, route.Formats); err != nil {
res = append(res, err)
}
rContainerID, rhkContainerID, _ := route.Params.GetOK("containerId")
if err := o.bindContainerID(rContainerID, rhkContainerID, route.Formats); err != nil {
res = append(res, err)
}
qLimit, qhkLimit, _ := qs.GetOK("limit")
if err := o.bindLimit(qLimit, qhkLimit, route.Formats); err != nil {
res = append(res, err)
}
qOffset, qhkOffset, _ := qs.GetOK("offset")
if err := o.bindOffset(qOffset, qhkOffset, route.Formats); err != nil {
res = append(res, err)
}
if runtime.HasBody(r) {
defer r.Body.Close()
var body models.SearchFilters
if err := route.Consumer.Consume(r.Body, &body); err != nil {
if err == io.EOF {
res = append(res, errors.Required("searchFilters", "body", ""))
} else {
res = append(res, errors.NewParseError("searchFilters", "body", "", err))
}
} else {
// validate body object
if err := body.Validate(route.Formats); err != nil {
res = append(res, err)
}
ctx := validate.WithOperationRequest(context.Background())
if err := body.ContextValidate(ctx, route.Formats); err != nil {
res = append(res, err)
}
if len(res) == 0 {
o.SearchFilters = &body
}
}
} else {
res = append(res, errors.Required("searchFilters", "body", ""))
}
qWalletConnect, qhkWalletConnect, _ := qs.GetOK("walletConnect")
if err := o.bindWalletConnect(qWalletConnect, qhkWalletConnect, route.Formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
// bindXBearerSignature binds and validates parameter XBearerSignature from header.
func (o *SearchObjectsParams) bindXBearerSignature(rawData []string, hasKey bool, formats strfmt.Registry) error {
if !hasKey {
return errors.Required("X-Bearer-Signature", "header", rawData)
}
var raw string
if len(rawData) > 0 {
raw = rawData[len(rawData)-1]
}
// Required: true
if err := validate.RequiredString("X-Bearer-Signature", "header", raw); err != nil {
return err
}
o.XBearerSignature = raw
return nil
}
// bindXBearerSignatureKey binds and validates parameter XBearerSignatureKey from header.
func (o *SearchObjectsParams) bindXBearerSignatureKey(rawData []string, hasKey bool, formats strfmt.Registry) error {
if !hasKey {
return errors.Required("X-Bearer-Signature-Key", "header", rawData)
}
var raw string
if len(rawData) > 0 {
raw = rawData[len(rawData)-1]
}
// Required: true
if err := validate.RequiredString("X-Bearer-Signature-Key", "header", raw); err != nil {
return err
}
o.XBearerSignatureKey = raw
return nil
}
// bindContainerID binds and validates parameter ContainerID from path.
func (o *SearchObjectsParams) bindContainerID(rawData []string, hasKey bool, formats strfmt.Registry) error {
var raw string
if len(rawData) > 0 {
raw = rawData[len(rawData)-1]
}
// Required: true
// Parameter is provided by construction from the route
o.ContainerID = raw
return nil
}
// bindLimit binds and validates parameter Limit from query.
func (o *SearchObjectsParams) bindLimit(rawData []string, hasKey bool, formats strfmt.Registry) error {
var raw string
if len(rawData) > 0 {
raw = rawData[len(rawData)-1]
}
// Required: false
// AllowEmptyValue: false
if raw == "" { // empty values pass all other validations
// Default values have been previously initialized by NewSearchObjectsParams()
return nil
}
value, err := swag.ConvertInt64(raw)
if err != nil {
return errors.InvalidType("limit", "query", "int64", raw)
}
o.Limit = &value
if err := o.validateLimit(formats); err != nil {
return err
}
return nil
}
// validateLimit carries on validations for parameter Limit
func (o *SearchObjectsParams) validateLimit(formats strfmt.Registry) error {
if err := validate.MinimumInt("limit", "query", *o.Limit, 1, false); err != nil {
return err
}
if err := validate.MaximumInt("limit", "query", *o.Limit, 10000, false); err != nil {
return err
}
return nil
}
// bindOffset binds and validates parameter Offset from query.
func (o *SearchObjectsParams) bindOffset(rawData []string, hasKey bool, formats strfmt.Registry) error {
var raw string
if len(rawData) > 0 {
raw = rawData[len(rawData)-1]
}
// Required: false
// AllowEmptyValue: false
if raw == "" { // empty values pass all other validations
// Default values have been previously initialized by NewSearchObjectsParams()
return nil
}
value, err := swag.ConvertInt64(raw)
if err != nil {
return errors.InvalidType("offset", "query", "int64", raw)
}
o.Offset = &value
if err := o.validateOffset(formats); err != nil {
return err
}
return nil
}
// validateOffset carries on validations for parameter Offset
func (o *SearchObjectsParams) validateOffset(formats strfmt.Registry) error {
if err := validate.MinimumInt("offset", "query", *o.Offset, 0, false); err != nil {
return err
}
return nil
}
// bindWalletConnect binds and validates parameter WalletConnect from query.
func (o *SearchObjectsParams) bindWalletConnect(rawData []string, hasKey bool, formats strfmt.Registry) error {
var raw string
if len(rawData) > 0 {
raw = rawData[len(rawData)-1]
}
// Required: false
// AllowEmptyValue: false
if raw == "" { // empty values pass all other validations
// Default values have been previously initialized by NewSearchObjectsParams()
return nil
}
value, err := swag.ConvertBool(raw)
if err != nil {
return errors.InvalidType("walletConnect", "query", "bool", raw)
}
o.WalletConnect = &value
return nil
}

View file

@ -0,0 +1,100 @@
// Code generated by go-swagger; DO NOT EDIT.
package operations
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"net/http"
"github.com/go-openapi/runtime"
"github.com/nspcc-dev/neofs-rest-gw/gen/models"
)
// SearchObjectsOKCode is the HTTP code returned for type SearchObjectsOK
const SearchObjectsOKCode int = 200
/*SearchObjectsOK List of objects
swagger:response searchObjectsOK
*/
type SearchObjectsOK struct {
/*
In: Body
*/
Payload *models.ObjectList `json:"body,omitempty"`
}
// NewSearchObjectsOK creates SearchObjectsOK with default headers values
func NewSearchObjectsOK() *SearchObjectsOK {
return &SearchObjectsOK{}
}
// WithPayload adds the payload to the search objects o k response
func (o *SearchObjectsOK) WithPayload(payload *models.ObjectList) *SearchObjectsOK {
o.Payload = payload
return o
}
// SetPayload sets the payload to the search objects o k response
func (o *SearchObjectsOK) SetPayload(payload *models.ObjectList) {
o.Payload = payload
}
// WriteResponse to the client
func (o *SearchObjectsOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
rw.WriteHeader(200)
if o.Payload != nil {
payload := o.Payload
if err := producer.Produce(rw, payload); err != nil {
panic(err) // let the recovery middleware deal with this
}
}
}
// SearchObjectsBadRequestCode is the HTTP code returned for type SearchObjectsBadRequest
const SearchObjectsBadRequestCode int = 400
/*SearchObjectsBadRequest Bad request
swagger:response searchObjectsBadRequest
*/
type SearchObjectsBadRequest struct {
/*
In: Body
*/
Payload models.Error `json:"body,omitempty"`
}
// NewSearchObjectsBadRequest creates SearchObjectsBadRequest with default headers values
func NewSearchObjectsBadRequest() *SearchObjectsBadRequest {
return &SearchObjectsBadRequest{}
}
// WithPayload adds the payload to the search objects bad request response
func (o *SearchObjectsBadRequest) WithPayload(payload models.Error) *SearchObjectsBadRequest {
o.Payload = payload
return o
}
// SetPayload sets the payload to the search objects bad request response
func (o *SearchObjectsBadRequest) SetPayload(payload models.Error) {
o.Payload = payload
}
// WriteResponse to the client
func (o *SearchObjectsBadRequest) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
rw.WriteHeader(400)
payload := o.Payload
if err := producer.Produce(rw, payload); err != nil {
panic(err) // let the recovery middleware deal with this
}
}