github.com/weaviate/weaviate@v1.24.6/adapters/handlers/rest/clusterapi/indices_payloads.go (about)

     1  //                           _       _
     2  // __      _____  __ ___   ___  __ _| |_ ___
     3  // \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
     4  //  \ V  V /  __/ (_| |\ V /| | (_| | ||  __/
     5  //   \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
     6  //
     7  //  Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
     8  //
     9  //  CONTACT: hello@weaviate.io
    10  //
    11  
    12  package clusterapi
    13  
    14  import (
    15  	"bytes"
    16  	"encoding/binary"
    17  	"encoding/json"
    18  	"fmt"
    19  	"io"
    20  	"math"
    21  	"net/http"
    22  
    23  	"github.com/go-openapi/strfmt"
    24  	"github.com/pkg/errors"
    25  	"github.com/weaviate/weaviate/entities/additional"
    26  	"github.com/weaviate/weaviate/entities/aggregation"
    27  	"github.com/weaviate/weaviate/entities/filters"
    28  	"github.com/weaviate/weaviate/entities/searchparams"
    29  	"github.com/weaviate/weaviate/entities/storobj"
    30  	"github.com/weaviate/weaviate/usecases/objects"
    31  	"github.com/weaviate/weaviate/usecases/scaler"
    32  )
    33  
    34  var IndicesPayloads = indicesPayloads{}
    35  
    36  type indicesPayloads struct {
    37  	ErrorList                 errorListPayload
    38  	SingleObject              singleObjectPayload
    39  	MergeDoc                  mergeDocPayload
    40  	ObjectList                objectListPayload
    41  	VersionedObjectList       versionedObjectListPayload
    42  	SearchResults             searchResultsPayload
    43  	SearchParams              searchParamsPayload
    44  	ReferenceList             referenceListPayload
    45  	AggregationParams         aggregationParamsPayload
    46  	AggregationResult         aggregationResultPayload
    47  	FindUUIDsParams           findUUIDsParamsPayload
    48  	FindUUIDsResults          findUUIDsResultsPayload
    49  	BatchDeleteParams         batchDeleteParamsPayload
    50  	BatchDeleteResults        batchDeleteResultsPayload
    51  	GetShardQueueSizeParams   getShardQueueSizeParamsPayload
    52  	GetShardQueueSizeResults  getShardQueueSizeResultsPayload
    53  	GetShardStatusParams      getShardStatusParamsPayload
    54  	GetShardStatusResults     getShardStatusResultsPayload
    55  	UpdateShardStatusParams   updateShardStatusParamsPayload
    56  	UpdateShardsStatusResults updateShardsStatusResultsPayload
    57  	ShardFiles                shardFilesPayload
    58  	IncreaseReplicationFactor increaseReplicationFactorPayload
    59  }
    60  
    61  type increaseReplicationFactorPayload struct{}
    62  
    63  func (p increaseReplicationFactorPayload) Marshall(dist scaler.ShardDist) ([]byte, error) {
    64  	type payload struct {
    65  		ShardDist scaler.ShardDist `json:"shard_distribution"`
    66  	}
    67  
    68  	pay := payload{ShardDist: dist}
    69  	return json.Marshal(pay)
    70  }
    71  
    72  func (p increaseReplicationFactorPayload) Unmarshal(in []byte) (scaler.ShardDist, error) {
    73  	type payload struct {
    74  		ShardDist scaler.ShardDist `json:"shard_distribution"`
    75  	}
    76  
    77  	pay := payload{}
    78  	if err := json.Unmarshal(in, &pay); err != nil {
    79  		return nil, fmt.Errorf("unmarshal replication factor payload: %w", err)
    80  	}
    81  
    82  	return pay.ShardDist, nil
    83  }
    84  
    85  type errorListPayload struct{}
    86  
    87  func (e errorListPayload) MIME() string {
    88  	return "application/vnd.weaviate.error.list+json"
    89  }
    90  
    91  func (e errorListPayload) SetContentTypeHeader(w http.ResponseWriter) {
    92  	w.Header().Set("content-type", e.MIME())
    93  }
    94  
    95  func (e errorListPayload) CheckContentTypeHeader(r *http.Response) (string, bool) {
    96  	ct := r.Header.Get("content-type")
    97  	return ct, ct == e.MIME()
    98  }
    99  
   100  func (e errorListPayload) Marshal(in []error) ([]byte, error) {
   101  	converted := make([]interface{}, len(in))
   102  	for i, err := range in {
   103  		if err == nil {
   104  			continue
   105  		}
   106  
   107  		converted[i] = err.Error()
   108  	}
   109  
   110  	return json.Marshal(converted)
   111  }
   112  
   113  func (e errorListPayload) Unmarshal(in []byte) []error {
   114  	var msgs []interface{}
   115  	json.Unmarshal(in, &msgs)
   116  
   117  	converted := make([]error, len(msgs))
   118  
   119  	for i, msg := range msgs {
   120  		if msg == nil {
   121  			continue
   122  		}
   123  
   124  		converted[i] = errors.New(msg.(string))
   125  	}
   126  
   127  	return converted
   128  }
   129  
   130  type singleObjectPayload struct{}
   131  
   132  func (p singleObjectPayload) MIME() string {
   133  	return "application/vnd.weaviate.storobj+octet-stream"
   134  }
   135  
   136  func (p singleObjectPayload) SetContentTypeHeader(w http.ResponseWriter) {
   137  	w.Header().Set("content-type", p.MIME())
   138  }
   139  
   140  func (p singleObjectPayload) SetContentTypeHeaderReq(r *http.Request) {
   141  	r.Header.Set("content-type", p.MIME())
   142  }
   143  
   144  func (p singleObjectPayload) CheckContentTypeHeader(r *http.Response) (string, bool) {
   145  	ct := r.Header.Get("content-type")
   146  	return ct, ct == p.MIME()
   147  }
   148  
   149  func (p singleObjectPayload) Marshal(in *storobj.Object) ([]byte, error) {
   150  	return in.MarshalBinary()
   151  }
   152  
   153  func (p singleObjectPayload) Unmarshal(in []byte) (*storobj.Object, error) {
   154  	return storobj.FromBinary(in)
   155  }
   156  
   157  type objectListPayload struct{}
   158  
   159  func (p objectListPayload) MIME() string {
   160  	return "application/vnd.weaviate.storobj.list+octet-stream"
   161  }
   162  
   163  func (p objectListPayload) CheckContentTypeHeader(r *http.Response) (string, bool) {
   164  	ct := r.Header.Get("content-type")
   165  	return ct, ct == p.MIME()
   166  }
   167  
   168  func (p objectListPayload) SetContentTypeHeader(w http.ResponseWriter) {
   169  	w.Header().Set("content-type", p.MIME())
   170  }
   171  
   172  func (p objectListPayload) SetContentTypeHeaderReq(r *http.Request) {
   173  	r.Header.Set("content-type", p.MIME())
   174  }
   175  
   176  func (p objectListPayload) Marshal(in []*storobj.Object) ([]byte, error) {
   177  	// NOTE: This implementation is not optimized for allocation efficiency,
   178  	// reserve 1024 byte per object which is rather arbitrary
   179  	out := make([]byte, 0, 1024*len(in))
   180  
   181  	reusableLengthBuf := make([]byte, 8)
   182  	for _, ind := range in {
   183  		if ind != nil {
   184  			bytes, err := ind.MarshalBinary()
   185  			if err != nil {
   186  				return nil, err
   187  			}
   188  
   189  			length := uint64(len(bytes))
   190  			binary.LittleEndian.PutUint64(reusableLengthBuf, length)
   191  
   192  			out = append(out, reusableLengthBuf...)
   193  			out = append(out, bytes...)
   194  		}
   195  	}
   196  
   197  	return out, nil
   198  }
   199  
   200  func (p objectListPayload) Unmarshal(in []byte) ([]*storobj.Object, error) {
   201  	var out []*storobj.Object
   202  
   203  	reusableLengthBuf := make([]byte, 8)
   204  	r := bytes.NewReader(in)
   205  
   206  	for {
   207  		_, err := r.Read(reusableLengthBuf)
   208  		if err == io.EOF {
   209  			break
   210  		}
   211  		if err != nil {
   212  			return nil, err
   213  		}
   214  
   215  		payloadBytes := make([]byte, binary.LittleEndian.Uint64(reusableLengthBuf))
   216  		_, err = r.Read(payloadBytes)
   217  		if err != nil {
   218  			return nil, err
   219  		}
   220  
   221  		obj, err := storobj.FromBinary(payloadBytes)
   222  		if err != nil {
   223  			return nil, err
   224  		}
   225  
   226  		out = append(out, obj)
   227  	}
   228  
   229  	return out, nil
   230  }
   231  
   232  type versionedObjectListPayload struct{}
   233  
   234  func (p versionedObjectListPayload) MIME() string {
   235  	return "application/vnd.weaviate.vobject.list+octet-stream"
   236  }
   237  
   238  func (p versionedObjectListPayload) CheckContentTypeHeader(r *http.Response) (string, bool) {
   239  	ct := r.Header.Get("content-type")
   240  	return ct, ct == p.MIME()
   241  }
   242  
   243  func (p versionedObjectListPayload) SetContentTypeHeader(w http.ResponseWriter) {
   244  	w.Header().Set("content-type", p.MIME())
   245  }
   246  
   247  func (p versionedObjectListPayload) SetContentTypeHeaderReq(r *http.Request) {
   248  	r.Header.Set("content-type", p.MIME())
   249  }
   250  
   251  func (p versionedObjectListPayload) CheckContentTypeHeaderReq(r *http.Request) (string, bool) {
   252  	ct := r.Header.Get("content-type")
   253  	return ct, ct == p.MIME()
   254  }
   255  
   256  func (p versionedObjectListPayload) Marshal(in []*objects.VObject) ([]byte, error) {
   257  	// NOTE: This implementation is not optimized for allocation efficiency,
   258  	// reserve 1024 byte per object which is rather arbitrary
   259  	out := make([]byte, 0, 1024*len(in))
   260  
   261  	reusableLengthBuf := make([]byte, 8)
   262  	for _, ind := range in {
   263  		objBytes, err := ind.MarshalBinary()
   264  		if err != nil {
   265  			return nil, err
   266  		}
   267  
   268  		length := uint64(len(objBytes))
   269  		binary.LittleEndian.PutUint64(reusableLengthBuf, length)
   270  
   271  		out = append(out, reusableLengthBuf...)
   272  		out = append(out, objBytes...)
   273  	}
   274  
   275  	return out, nil
   276  }
   277  
   278  func (p versionedObjectListPayload) Unmarshal(in []byte) ([]*objects.VObject, error) {
   279  	var out []*objects.VObject
   280  
   281  	reusableLengthBuf := make([]byte, 8)
   282  	r := bytes.NewReader(in)
   283  
   284  	for {
   285  		_, err := r.Read(reusableLengthBuf)
   286  		if err == io.EOF {
   287  			break
   288  		}
   289  		if err != nil {
   290  			return nil, err
   291  		}
   292  
   293  		ln := binary.LittleEndian.Uint64(reusableLengthBuf)
   294  		payloadBytes := make([]byte, ln)
   295  		_, err = r.Read(payloadBytes)
   296  		if err != nil {
   297  			return nil, err
   298  		}
   299  
   300  		var vobj objects.VObject
   301  		err = vobj.UnmarshalBinary(payloadBytes)
   302  		if err != nil {
   303  			return nil, err
   304  		}
   305  
   306  		out = append(out, &vobj)
   307  	}
   308  
   309  	return out, nil
   310  }
   311  
   312  type mergeDocPayload struct{}
   313  
   314  func (p mergeDocPayload) MIME() string {
   315  	return "application/vnd.weaviate.mergedoc+json"
   316  }
   317  
   318  func (p mergeDocPayload) SetContentTypeHeader(w http.ResponseWriter) {
   319  	w.Header().Set("content-type", p.MIME())
   320  }
   321  
   322  func (p mergeDocPayload) SetContentTypeHeaderReq(r *http.Request) {
   323  	r.Header.Set("content-type", p.MIME())
   324  }
   325  
   326  func (p mergeDocPayload) CheckContentTypeHeaderReq(r *http.Request) (string, bool) {
   327  	ct := r.Header.Get("content-type")
   328  	return ct, ct == p.MIME()
   329  }
   330  
   331  func (p mergeDocPayload) Marshal(in objects.MergeDocument) ([]byte, error) {
   332  	// assumes that this type is fully json-marshable. Not the most
   333  	// bandwidth-efficient way, but this is unlikely to become a bottleneck. If it
   334  	// does, a custom binary marshaller might be more appropriate
   335  	return json.Marshal(in)
   336  }
   337  
   338  func (p mergeDocPayload) Unmarshal(in []byte) (objects.MergeDocument, error) {
   339  	var mergeDoc objects.MergeDocument
   340  	err := json.Unmarshal(in, &mergeDoc)
   341  	return mergeDoc, err
   342  }
   343  
   344  type searchParamsPayload struct{}
   345  
   346  func (p searchParamsPayload) Marshal(vector []float32, targetVector string, limit int,
   347  	filter *filters.LocalFilter, keywordRanking *searchparams.KeywordRanking,
   348  	sort []filters.Sort, cursor *filters.Cursor, groupBy *searchparams.GroupBy,
   349  	addP additional.Properties,
   350  ) ([]byte, error) {
   351  	type params struct {
   352  		SearchVector   []float32                    `json:"searchVector"`
   353  		TargetVector   string                       `json:"targetVector"`
   354  		Limit          int                          `json:"limit"`
   355  		Filters        *filters.LocalFilter         `json:"filters"`
   356  		KeywordRanking *searchparams.KeywordRanking `json:"keywordRanking"`
   357  		Sort           []filters.Sort               `json:"sort"`
   358  		Cursor         *filters.Cursor              `json:"cursor"`
   359  		GroupBy        *searchparams.GroupBy        `json:"groupBy"`
   360  		Additional     additional.Properties        `json:"additional"`
   361  	}
   362  
   363  	par := params{vector, targetVector, limit, filter, keywordRanking, sort, cursor, groupBy, addP}
   364  	return json.Marshal(par)
   365  }
   366  
   367  func (p searchParamsPayload) Unmarshal(in []byte) ([]float32, string, float32, int,
   368  	*filters.LocalFilter, *searchparams.KeywordRanking, []filters.Sort,
   369  	*filters.Cursor, *searchparams.GroupBy, additional.Properties, error,
   370  ) {
   371  	type searchParametersPayload struct {
   372  		SearchVector   []float32                    `json:"searchVector"`
   373  		TargetVector   string                       `json:"targetVector"`
   374  		Distance       float32                      `json:"distance"`
   375  		Limit          int                          `json:"limit"`
   376  		Filters        *filters.LocalFilter         `json:"filters"`
   377  		KeywordRanking *searchparams.KeywordRanking `json:"keywordRanking"`
   378  		Sort           []filters.Sort               `json:"sort"`
   379  		Cursor         *filters.Cursor              `json:"cursor"`
   380  		GroupBy        *searchparams.GroupBy        `json:"groupBy"`
   381  		Additional     additional.Properties        `json:"additional"`
   382  	}
   383  	var par searchParametersPayload
   384  	err := json.Unmarshal(in, &par)
   385  	return par.SearchVector, par.TargetVector, par.Distance, par.Limit,
   386  		par.Filters, par.KeywordRanking, par.Sort, par.Cursor, par.GroupBy, par.Additional, err
   387  }
   388  
   389  func (p searchParamsPayload) MIME() string {
   390  	return "vnd.weaviate.searchparams+json"
   391  }
   392  
   393  func (p searchParamsPayload) CheckContentTypeHeaderReq(r *http.Request) (string, bool) {
   394  	ct := r.Header.Get("content-type")
   395  	return ct, ct == p.MIME()
   396  }
   397  
   398  func (p searchParamsPayload) SetContentTypeHeaderReq(r *http.Request) {
   399  	r.Header.Set("content-type", p.MIME())
   400  }
   401  
   402  type searchResultsPayload struct{}
   403  
   404  func (p searchResultsPayload) Unmarshal(in []byte) ([]*storobj.Object, []float32, error) {
   405  	read := uint64(0)
   406  
   407  	objsLength := binary.LittleEndian.Uint64(in[read : read+8])
   408  	read += 8
   409  
   410  	objs, err := IndicesPayloads.ObjectList.Unmarshal(in[read : read+objsLength])
   411  	if err != nil {
   412  		return nil, nil, err
   413  	}
   414  	read += objsLength
   415  
   416  	distsLength := binary.LittleEndian.Uint64(in[read : read+8])
   417  	read += 8
   418  
   419  	dists := make([]float32, distsLength)
   420  	for i := range dists {
   421  		dists[i] = math.Float32frombits(binary.LittleEndian.Uint32(in[read : read+4]))
   422  		read += 4
   423  	}
   424  
   425  	if read != uint64(len(in)) {
   426  		return nil, nil, errors.Errorf("corrupt read: %d != %d", read, len(in))
   427  	}
   428  
   429  	return objs, dists, nil
   430  }
   431  
   432  func (p searchResultsPayload) Marshal(objs []*storobj.Object,
   433  	dists []float32,
   434  ) ([]byte, error) {
   435  	reusableLengthBuf := make([]byte, 8)
   436  	var out []byte
   437  	objsBytes, err := IndicesPayloads.ObjectList.Marshal(objs)
   438  	if err != nil {
   439  		return nil, err
   440  	}
   441  
   442  	objsLength := uint64(len(objsBytes))
   443  	binary.LittleEndian.PutUint64(reusableLengthBuf, objsLength)
   444  
   445  	out = append(out, reusableLengthBuf...)
   446  	out = append(out, objsBytes...)
   447  
   448  	distsLength := uint64(len(dists))
   449  	binary.LittleEndian.PutUint64(reusableLengthBuf, distsLength)
   450  	out = append(out, reusableLengthBuf...)
   451  
   452  	distsBuf := make([]byte, distsLength*4)
   453  	for i, dist := range dists {
   454  		distUint32 := math.Float32bits(dist)
   455  		binary.LittleEndian.PutUint32(distsBuf[(i*4):((i+1)*4)], distUint32)
   456  	}
   457  	out = append(out, distsBuf...)
   458  
   459  	return out, nil
   460  }
   461  
   462  func (p searchResultsPayload) MIME() string {
   463  	return "application/vnd.weaviate.shardsearchresults+octet-stream"
   464  }
   465  
   466  func (p searchResultsPayload) SetContentTypeHeader(w http.ResponseWriter) {
   467  	w.Header().Set("content-type", p.MIME())
   468  }
   469  
   470  func (p searchResultsPayload) CheckContentTypeHeader(r *http.Response) (string, bool) {
   471  	ct := r.Header.Get("content-type")
   472  	return ct, ct == p.MIME()
   473  }
   474  
   475  type referenceListPayload struct{}
   476  
   477  func (p referenceListPayload) MIME() string {
   478  	return "application/vnd.weaviate.references.list+json"
   479  }
   480  
   481  func (p referenceListPayload) SetContentTypeHeaderReq(r *http.Request) {
   482  	r.Header.Set("content-type", p.MIME())
   483  }
   484  
   485  func (p referenceListPayload) CheckContentTypeHeaderReq(r *http.Request) (string, bool) {
   486  	ct := r.Header.Get("content-type")
   487  	return ct, ct == p.MIME()
   488  }
   489  
   490  func (p referenceListPayload) Marshal(in objects.BatchReferences) ([]byte, error) {
   491  	// assumes that this type is fully json-marshable. Not the most
   492  	// bandwidth-efficient way, but this is unlikely to become a bottleneck. If it
   493  	// does, a custom binary marshaller might be more appropriate
   494  	return json.Marshal(in)
   495  }
   496  
   497  func (p referenceListPayload) Unmarshal(in []byte) (objects.BatchReferences, error) {
   498  	var out objects.BatchReferences
   499  	err := json.Unmarshal(in, &out)
   500  	return out, err
   501  }
   502  
   503  type aggregationParamsPayload struct{}
   504  
   505  func (p aggregationParamsPayload) Marshal(params aggregation.Params) ([]byte, error) {
   506  	// assumes that this type is fully json-marshable. Not the most
   507  	// bandwidth-efficient way, but this is unlikely to become a bottleneck. If it
   508  	// does, a custom binary marshaller might be more appropriate
   509  	return json.Marshal(params)
   510  }
   511  
   512  func (p aggregationParamsPayload) Unmarshal(in []byte) (aggregation.Params, error) {
   513  	var out aggregation.Params
   514  	err := json.Unmarshal(in, &out)
   515  	return out, err
   516  }
   517  
   518  func (p aggregationParamsPayload) MIME() string {
   519  	return "application/vnd.weaviate.aggregations.params+json"
   520  }
   521  
   522  func (p aggregationParamsPayload) SetContentTypeHeaderReq(r *http.Request) {
   523  	r.Header.Set("content-type", p.MIME())
   524  }
   525  
   526  func (p aggregationParamsPayload) CheckContentTypeHeaderReq(r *http.Request) (string, bool) {
   527  	ct := r.Header.Get("content-type")
   528  	return ct, ct == p.MIME()
   529  }
   530  
   531  type aggregationResultPayload struct{}
   532  
   533  func (p aggregationResultPayload) MIME() string {
   534  	return "application/vnd.weaviate.aggregations.result+json"
   535  }
   536  
   537  func (p aggregationResultPayload) CheckContentTypeHeader(res *http.Response) (string, bool) {
   538  	ct := res.Header.Get("content-type")
   539  	return ct, ct == p.MIME()
   540  }
   541  
   542  func (p aggregationResultPayload) SetContentTypeHeader(w http.ResponseWriter) {
   543  	w.Header().Set("content-type", p.MIME())
   544  }
   545  
   546  func (p aggregationResultPayload) Marshal(in *aggregation.Result) ([]byte, error) {
   547  	// assumes that this type is fully json-marshable. Not the most
   548  	// bandwidth-efficient way, but this is unlikely to become a bottleneck. If it
   549  	// does, a custom binary marshaller might be more appropriate
   550  	return json.Marshal(in)
   551  }
   552  
   553  func (p aggregationResultPayload) Unmarshal(in []byte) (*aggregation.Result, error) {
   554  	var out aggregation.Result
   555  	err := json.Unmarshal(in, &out)
   556  	return &out, err
   557  }
   558  
   559  type findUUIDsParamsPayload struct{}
   560  
   561  func (p findUUIDsParamsPayload) Marshal(filter *filters.LocalFilter) ([]byte, error) {
   562  	type params struct {
   563  		Filters *filters.LocalFilter `json:"filters"`
   564  	}
   565  
   566  	par := params{filter}
   567  	return json.Marshal(par)
   568  }
   569  
   570  func (p findUUIDsParamsPayload) Unmarshal(in []byte) (*filters.LocalFilter, error) {
   571  	type findUUIDsParametersPayload struct {
   572  		Filters *filters.LocalFilter `json:"filters"`
   573  	}
   574  	var par findUUIDsParametersPayload
   575  	err := json.Unmarshal(in, &par)
   576  	return par.Filters, err
   577  }
   578  
   579  func (p findUUIDsParamsPayload) MIME() string {
   580  	return "vnd.weaviate.finduuidsparams+json"
   581  }
   582  
   583  func (p findUUIDsParamsPayload) CheckContentTypeHeaderReq(r *http.Request) (string, bool) {
   584  	ct := r.Header.Get("content-type")
   585  	return ct, ct == p.MIME()
   586  }
   587  
   588  func (p findUUIDsParamsPayload) SetContentTypeHeaderReq(r *http.Request) {
   589  	r.Header.Set("content-type", p.MIME())
   590  }
   591  
   592  type findUUIDsResultsPayload struct{}
   593  
   594  func (p findUUIDsResultsPayload) Unmarshal(in []byte) ([]strfmt.UUID, error) {
   595  	var out []strfmt.UUID
   596  	err := json.Unmarshal(in, &out)
   597  	return out, err
   598  }
   599  
   600  func (p findUUIDsResultsPayload) Marshal(in []strfmt.UUID) ([]byte, error) {
   601  	return json.Marshal(in)
   602  }
   603  
   604  func (p findUUIDsResultsPayload) MIME() string {
   605  	return "application/vnd.weaviate.findUUIDsresults+octet-stream"
   606  }
   607  
   608  func (p findUUIDsResultsPayload) SetContentTypeHeader(w http.ResponseWriter) {
   609  	w.Header().Set("content-type", p.MIME())
   610  }
   611  
   612  func (p findUUIDsResultsPayload) CheckContentTypeHeader(r *http.Response) (string, bool) {
   613  	ct := r.Header.Get("content-type")
   614  	return ct, ct == p.MIME()
   615  }
   616  
   617  type batchDeleteParamsPayload struct{}
   618  
   619  func (p batchDeleteParamsPayload) Marshal(uuids []strfmt.UUID, dryRun bool) ([]byte, error) {
   620  	type params struct {
   621  		UUIDs  []strfmt.UUID `json:"uuids"`
   622  		DryRun bool          `json:"dryRun"`
   623  	}
   624  
   625  	par := params{uuids, dryRun}
   626  	return json.Marshal(par)
   627  }
   628  
   629  func (p batchDeleteParamsPayload) Unmarshal(in []byte) ([]strfmt.UUID, bool, error) {
   630  	type batchDeleteParametersPayload struct {
   631  		UUIDs  []strfmt.UUID `json:"uuids"`
   632  		DryRun bool          `json:"dryRun"`
   633  	}
   634  	var par batchDeleteParametersPayload
   635  	err := json.Unmarshal(in, &par)
   636  	return par.UUIDs, par.DryRun, err
   637  }
   638  
   639  func (p batchDeleteParamsPayload) MIME() string {
   640  	return "vnd.weaviate.batchdeleteparams+json"
   641  }
   642  
   643  func (p batchDeleteParamsPayload) CheckContentTypeHeaderReq(r *http.Request) (string, bool) {
   644  	ct := r.Header.Get("content-type")
   645  	return ct, ct == p.MIME()
   646  }
   647  
   648  func (p batchDeleteParamsPayload) SetContentTypeHeaderReq(r *http.Request) {
   649  	r.Header.Set("content-type", p.MIME())
   650  }
   651  
   652  type batchDeleteResultsPayload struct{}
   653  
   654  func (p batchDeleteResultsPayload) Unmarshal(in []byte) (objects.BatchSimpleObjects, error) {
   655  	var out objects.BatchSimpleObjects
   656  	err := json.Unmarshal(in, &out)
   657  	return out, err
   658  }
   659  
   660  func (p batchDeleteResultsPayload) Marshal(in objects.BatchSimpleObjects) ([]byte, error) {
   661  	return json.Marshal(in)
   662  }
   663  
   664  func (p batchDeleteResultsPayload) MIME() string {
   665  	return "application/vnd.weaviate.batchdeleteresults+octet-stream"
   666  }
   667  
   668  func (p batchDeleteResultsPayload) SetContentTypeHeader(w http.ResponseWriter) {
   669  	w.Header().Set("content-type", p.MIME())
   670  }
   671  
   672  func (p batchDeleteResultsPayload) CheckContentTypeHeader(r *http.Response) (string, bool) {
   673  	ct := r.Header.Get("content-type")
   674  	return ct, ct == p.MIME()
   675  }
   676  
   677  type getShardQueueSizeParamsPayload struct{}
   678  
   679  func (p getShardQueueSizeParamsPayload) MIME() string {
   680  	return "vnd.weaviate.getshardqueuesizeparams+json"
   681  }
   682  
   683  func (p getShardQueueSizeParamsPayload) CheckContentTypeHeaderReq(r *http.Request) (string, bool) {
   684  	ct := r.Header.Get("content-type")
   685  	return ct, ct == p.MIME()
   686  }
   687  
   688  func (p getShardQueueSizeParamsPayload) SetContentTypeHeaderReq(r *http.Request) {
   689  	r.Header.Set("content-type", p.MIME())
   690  }
   691  
   692  type getShardQueueSizeResultsPayload struct{}
   693  
   694  func (p getShardQueueSizeResultsPayload) Unmarshal(in []byte) (int64, error) {
   695  	var out int64
   696  	err := json.Unmarshal(in, &out)
   697  	return out, err
   698  }
   699  
   700  func (p getShardQueueSizeResultsPayload) Marshal(in int64) ([]byte, error) {
   701  	return json.Marshal(in)
   702  }
   703  
   704  func (p getShardQueueSizeResultsPayload) MIME() string {
   705  	return "application/vnd.weaviate.getshardqueuesizeresults+octet-stream"
   706  }
   707  
   708  func (p getShardQueueSizeResultsPayload) SetContentTypeHeader(w http.ResponseWriter) {
   709  	w.Header().Set("content-type", p.MIME())
   710  }
   711  
   712  func (p getShardQueueSizeResultsPayload) CheckContentTypeHeader(r *http.Response) (string, bool) {
   713  	ct := r.Header.Get("content-type")
   714  	return ct, ct == p.MIME()
   715  }
   716  
   717  type getShardStatusParamsPayload struct{}
   718  
   719  func (p getShardStatusParamsPayload) MIME() string {
   720  	return "vnd.weaviate.getshardstatusparams+json"
   721  }
   722  
   723  func (p getShardStatusParamsPayload) CheckContentTypeHeaderReq(r *http.Request) (string, bool) {
   724  	ct := r.Header.Get("content-type")
   725  	return ct, ct == p.MIME()
   726  }
   727  
   728  func (p getShardStatusParamsPayload) SetContentTypeHeaderReq(r *http.Request) {
   729  	r.Header.Set("content-type", p.MIME())
   730  }
   731  
   732  type getShardStatusResultsPayload struct{}
   733  
   734  func (p getShardStatusResultsPayload) Unmarshal(in []byte) (string, error) {
   735  	var out string
   736  	err := json.Unmarshal(in, &out)
   737  	return out, err
   738  }
   739  
   740  func (p getShardStatusResultsPayload) Marshal(in string) ([]byte, error) {
   741  	return json.Marshal(in)
   742  }
   743  
   744  func (p getShardStatusResultsPayload) MIME() string {
   745  	return "application/vnd.weaviate.getshardstatusresults+octet-stream"
   746  }
   747  
   748  func (p getShardStatusResultsPayload) SetContentTypeHeader(w http.ResponseWriter) {
   749  	w.Header().Set("content-type", p.MIME())
   750  }
   751  
   752  func (p getShardStatusResultsPayload) CheckContentTypeHeader(r *http.Response) (string, bool) {
   753  	ct := r.Header.Get("content-type")
   754  	return ct, ct == p.MIME()
   755  }
   756  
   757  type updateShardStatusParamsPayload struct{}
   758  
   759  func (p updateShardStatusParamsPayload) Marshal(targetStatus string) ([]byte, error) {
   760  	type params struct {
   761  		TargetStatus string `json:"targetStatus"`
   762  	}
   763  
   764  	par := params{targetStatus}
   765  	return json.Marshal(par)
   766  }
   767  
   768  func (p updateShardStatusParamsPayload) Unmarshal(in []byte) (string, error) {
   769  	type updateShardStatusParametersPayload struct {
   770  		TargetStatus string `json:"targetStatus"`
   771  	}
   772  	var par updateShardStatusParametersPayload
   773  	err := json.Unmarshal(in, &par)
   774  	return par.TargetStatus, err
   775  }
   776  
   777  func (p updateShardStatusParamsPayload) MIME() string {
   778  	return "vnd.weaviate.updateshardstatusparams+json"
   779  }
   780  
   781  func (p updateShardStatusParamsPayload) CheckContentTypeHeaderReq(r *http.Request) (string, bool) {
   782  	ct := r.Header.Get("content-type")
   783  	return ct, ct == p.MIME()
   784  }
   785  
   786  func (p updateShardStatusParamsPayload) SetContentTypeHeaderReq(r *http.Request) {
   787  	r.Header.Set("content-type", p.MIME())
   788  }
   789  
   790  type updateShardsStatusResultsPayload struct{}
   791  
   792  func (p updateShardsStatusResultsPayload) MIME() string {
   793  	return "application/vnd.weaviate.updateshardstatusresults+octet-stream"
   794  }
   795  
   796  func (p updateShardsStatusResultsPayload) SetContentTypeHeader(w http.ResponseWriter) {
   797  	w.Header().Set("content-type", p.MIME())
   798  }
   799  
   800  func (p updateShardsStatusResultsPayload) CheckContentTypeHeader(r *http.Response) (string, bool) {
   801  	ct := r.Header.Get("content-type")
   802  	return ct, ct == p.MIME()
   803  }
   804  
   805  type shardFilesPayload struct{}
   806  
   807  func (p shardFilesPayload) MIME() string {
   808  	return "application/vnd.weaviate.indexfiles+octet-stream"
   809  }
   810  
   811  func (p shardFilesPayload) SetContentTypeHeaderReq(r *http.Request) {
   812  	r.Header.Set("content-type", p.MIME())
   813  }
   814  
   815  func (p shardFilesPayload) CheckContentTypeHeaderReq(r *http.Request) (string, bool) {
   816  	ct := r.Header.Get("content-type")
   817  	return ct, ct == p.MIME()
   818  }