github.com/TrueCloudLab/frostfs-api-go/v2@v2.0.0-20230228134343-196241c4e79a/rpc/object.go (about)

     1  package rpc
     2  
     3  import (
     4  	"github.com/TrueCloudLab/frostfs-api-go/v2/object"
     5  	"github.com/TrueCloudLab/frostfs-api-go/v2/rpc/client"
     6  	"github.com/TrueCloudLab/frostfs-api-go/v2/rpc/common"
     7  	"github.com/TrueCloudLab/frostfs-api-go/v2/rpc/message"
     8  )
     9  
    10  const serviceObject = serviceNamePrefix + "object.ObjectService"
    11  
    12  const (
    13  	rpcObjectPut    = "Put"
    14  	rpcObjectGet    = "Get"
    15  	rpcObjectSearch = "Search"
    16  	rpcObjectRange  = "GetRange"
    17  	rpcObjectHash   = "GetRangeHash"
    18  	rpcObjectHead   = "Head"
    19  	rpcObjectDelete = "Delete"
    20  )
    21  
    22  // PutRequestWriter is an object.PutRequest
    23  // message streaming component.
    24  type PutRequestWriter struct {
    25  	wc client.MessageWriterCloser
    26  
    27  	resp message.Message
    28  }
    29  
    30  // Write writes req to the stream.
    31  func (w *PutRequestWriter) Write(req *object.PutRequest) error {
    32  	return w.wc.WriteMessage(req)
    33  }
    34  
    35  // Close closes the stream.
    36  func (w *PutRequestWriter) Close() error {
    37  	return w.wc.Close()
    38  }
    39  
    40  // PutObject executes ObjectService.Put RPC.
    41  func PutObject(
    42  	cli *client.Client,
    43  	resp *object.PutResponse,
    44  	opts ...client.CallOption,
    45  ) (*PutRequestWriter, error) {
    46  	wc, err := client.OpenClientStream(cli, common.CallMethodInfoClientStream(serviceObject, rpcObjectPut), resp, opts...)
    47  	if err != nil {
    48  		return nil, err
    49  	}
    50  
    51  	return &PutRequestWriter{
    52  		wc:   wc,
    53  		resp: resp,
    54  	}, nil
    55  }
    56  
    57  // GetResponseReader is an object.GetResponse
    58  // stream reader.
    59  type GetResponseReader struct {
    60  	r client.MessageReader
    61  }
    62  
    63  // Read reads response from the stream.
    64  //
    65  // Returns io.EOF of streaming is finished.
    66  func (r *GetResponseReader) Read(resp *object.GetResponse) error {
    67  	return r.r.ReadMessage(resp)
    68  }
    69  
    70  // GetObject executes ObjectService.Get RPC.
    71  func GetObject(
    72  	cli *client.Client,
    73  	req *object.GetRequest,
    74  	opts ...client.CallOption,
    75  ) (*GetResponseReader, error) {
    76  	wc, err := client.OpenServerStream(cli, common.CallMethodInfoServerStream(serviceObject, rpcObjectGet), req, opts...)
    77  	if err != nil {
    78  		return nil, err
    79  	}
    80  
    81  	return &GetResponseReader{
    82  		r: wc,
    83  	}, nil
    84  }
    85  
    86  // GetResponseReader is an object.SearchResponse
    87  // stream reader.
    88  type SearchResponseReader struct {
    89  	r client.MessageReader
    90  }
    91  
    92  // Read reads response from the stream.
    93  //
    94  // Returns io.EOF of streaming is finished.
    95  func (r *SearchResponseReader) Read(resp *object.SearchResponse) error {
    96  	return r.r.ReadMessage(resp)
    97  }
    98  
    99  // SearchObjects executes ObjectService.Search RPC.
   100  func SearchObjects(
   101  	cli *client.Client,
   102  	req *object.SearchRequest,
   103  	opts ...client.CallOption,
   104  ) (*SearchResponseReader, error) {
   105  	wc, err := client.OpenServerStream(cli, common.CallMethodInfoServerStream(serviceObject, rpcObjectSearch), req, opts...)
   106  	if err != nil {
   107  		return nil, err
   108  	}
   109  
   110  	return &SearchResponseReader{
   111  		r: wc,
   112  	}, nil
   113  }
   114  
   115  // GetResponseReader is an object.GetRangeResponse
   116  // stream reader.
   117  type ObjectRangeResponseReader struct {
   118  	r client.MessageReader
   119  }
   120  
   121  // Read reads response from the stream.
   122  //
   123  // Returns io.EOF of streaming is finished.
   124  func (r *ObjectRangeResponseReader) Read(resp *object.GetRangeResponse) error {
   125  	return r.r.ReadMessage(resp)
   126  }
   127  
   128  // GetObjectRange executes ObjectService.GetRange RPC.
   129  func GetObjectRange(
   130  	cli *client.Client,
   131  	req *object.GetRangeRequest,
   132  	opts ...client.CallOption,
   133  ) (*ObjectRangeResponseReader, error) {
   134  	wc, err := client.OpenServerStream(cli, common.CallMethodInfoServerStream(serviceObject, rpcObjectRange), req, opts...)
   135  	if err != nil {
   136  		return nil, err
   137  	}
   138  
   139  	return &ObjectRangeResponseReader{
   140  		r: wc,
   141  	}, nil
   142  }
   143  
   144  // HeadObject executes ObjectService.Head RPC.
   145  func HeadObject(
   146  	cli *client.Client,
   147  	req *object.HeadRequest,
   148  	opts ...client.CallOption,
   149  ) (*object.HeadResponse, error) {
   150  	resp := new(object.HeadResponse)
   151  
   152  	err := client.SendUnary(cli, common.CallMethodInfoUnary(serviceObject, rpcObjectHead), req, resp, opts...)
   153  	if err != nil {
   154  		return nil, err
   155  	}
   156  
   157  	return resp, nil
   158  }
   159  
   160  // DeleteObject executes ObjectService.Delete RPC.
   161  func DeleteObject(
   162  	cli *client.Client,
   163  	req *object.DeleteRequest,
   164  	opts ...client.CallOption,
   165  ) (*object.DeleteResponse, error) {
   166  	resp := new(object.DeleteResponse)
   167  
   168  	err := client.SendUnary(cli, common.CallMethodInfoUnary(serviceObject, rpcObjectDelete), req, resp, opts...)
   169  	if err != nil {
   170  		return nil, err
   171  	}
   172  
   173  	return resp, nil
   174  }
   175  
   176  // HashObjectRange executes ObjectService.GetRangeHash RPC.
   177  func HashObjectRange(
   178  	cli *client.Client,
   179  	req *object.GetRangeHashRequest,
   180  	opts ...client.CallOption,
   181  ) (*object.GetRangeHashResponse, error) {
   182  	resp := new(object.GetRangeHashResponse)
   183  
   184  	err := client.SendUnary(cli, common.CallMethodInfoUnary(serviceObject, rpcObjectHash), req, resp, opts...)
   185  	if err != nil {
   186  		return nil, err
   187  	}
   188  
   189  	return resp, nil
   190  }