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 }