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

     1  package object
     2  
     3  import (
     4  	"context"
     5  	"errors"
     6  
     7  	"google.golang.org/grpc"
     8  )
     9  
    10  // Client wraps ObjectServiceClient
    11  // with pre-defined configurations.
    12  type Client struct {
    13  	*cfg
    14  
    15  	client ObjectServiceClient
    16  }
    17  
    18  // Option represents Client option.
    19  type Option func(*cfg)
    20  
    21  type cfg struct {
    22  	callOpts []grpc.CallOption
    23  }
    24  
    25  // ErrNilObjectServiceClient is returned by functions that expect
    26  // a non-nil ObjectServiceClient, but received nil.
    27  var ErrNilObjectServiceClient = errors.New("object gRPC client is nil")
    28  
    29  func defaultCfg() *cfg {
    30  	return new(cfg)
    31  }
    32  
    33  // NewClient creates, initializes and returns a new Client instance.
    34  //
    35  // Options are applied one by one in order.
    36  func NewClient(c ObjectServiceClient, opts ...Option) (*Client, error) {
    37  	if c == nil {
    38  		return nil, ErrNilObjectServiceClient
    39  	}
    40  
    41  	cfg := defaultCfg()
    42  	for i := range opts {
    43  		opts[i](cfg)
    44  	}
    45  
    46  	return &Client{
    47  		cfg:    cfg,
    48  		client: c,
    49  	}, nil
    50  }
    51  
    52  func (c *Client) Get(ctx context.Context, req *GetRequest) (ObjectService_GetClient, error) {
    53  	return c.client.Get(ctx, req, c.callOpts...)
    54  }
    55  
    56  func (c *Client) Put(ctx context.Context) (ObjectService_PutClient, error) {
    57  	return c.client.Put(ctx, c.callOpts...)
    58  }
    59  
    60  func (c *Client) Head(ctx context.Context, req *HeadRequest) (*HeadResponse, error) {
    61  	return c.client.Head(ctx, req, c.callOpts...)
    62  }
    63  
    64  func (c *Client) Search(ctx context.Context, req *SearchRequest) (ObjectService_SearchClient, error) {
    65  	return c.client.Search(ctx, req, c.callOpts...)
    66  }
    67  
    68  func (c *Client) Delete(ctx context.Context, req *DeleteRequest) (*DeleteResponse, error) {
    69  	return c.client.Delete(ctx, req, c.callOpts...)
    70  }
    71  
    72  func (c *Client) GetRange(ctx context.Context, req *GetRangeRequest) (ObjectService_GetRangeClient, error) {
    73  	return c.client.GetRange(ctx, req, c.callOpts...)
    74  }
    75  
    76  func (c *Client) GetRangeHash(ctx context.Context, req *GetRangeHashRequest) (*GetRangeHashResponse, error) {
    77  	return c.client.GetRangeHash(ctx, req, c.callOpts...)
    78  }
    79  
    80  // WithCallOptions returns Option that configures
    81  // Client to attach call options to each rpc call.
    82  func WithCallOptions(opts []grpc.CallOption) Option {
    83  	return func(c *cfg) {
    84  		c.callOpts = opts
    85  	}
    86  }