github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/internal/grpcwrapper/rawtopic/client.go (about)

     1  package rawtopic
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  
     7  	"github.com/ydb-platform/ydb-go-genproto/Ydb_Topic_V1"
     8  
     9  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/grpcwrapper/rawtopic/rawtopicreader"
    10  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/grpcwrapper/rawtopic/rawtopicwriter"
    11  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/grpcwrapper/rawydb"
    12  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/xerrors"
    13  )
    14  
    15  type Client struct {
    16  	service Ydb_Topic_V1.TopicServiceClient
    17  }
    18  
    19  func NewClient(service Ydb_Topic_V1.TopicServiceClient) Client {
    20  	return Client{service: service}
    21  }
    22  
    23  func (c *Client) AlterTopic(ctx context.Context, req *AlterTopicRequest) (res AlterTopicResult, err error) {
    24  	resp, err := c.service.AlterTopic(ctx, req.ToProto())
    25  	if err != nil {
    26  		return res, xerrors.WithStackTrace(fmt.Errorf("ydb: alter topic grpc failed: %w", err))
    27  	}
    28  	err = res.FromProto(resp)
    29  
    30  	return res, err
    31  }
    32  
    33  func (c *Client) CreateTopic(
    34  	ctx context.Context,
    35  	req *CreateTopicRequest,
    36  ) (res CreateTopicResult, err error) {
    37  	resp, err := c.service.CreateTopic(ctx, req.ToProto())
    38  	if err != nil {
    39  		return res, xerrors.WithStackTrace(fmt.Errorf("ydb: create topic grpc failed: %w", err))
    40  	}
    41  	err = res.FromProto(resp)
    42  
    43  	return res, err
    44  }
    45  
    46  func (c *Client) DescribeTopic(ctx context.Context, req DescribeTopicRequest) (res DescribeTopicResult, err error) {
    47  	resp, err := c.service.DescribeTopic(ctx, req.ToProto())
    48  	if err != nil {
    49  		return DescribeTopicResult{}, xerrors.WithStackTrace(
    50  			xerrors.Wrap(
    51  				fmt.Errorf("ydb: describe topic grpc failed: %w", err),
    52  			),
    53  		)
    54  	}
    55  	err = res.FromProto(resp)
    56  
    57  	return res, err
    58  }
    59  
    60  func (c *Client) DescribeConsumer(ctx context.Context, req DescribeConsumerRequest) (
    61  	res DescribeConsumerResult, err error,
    62  ) {
    63  	resp, err := c.service.DescribeConsumer(ctx, req.ToProto())
    64  	if err != nil {
    65  		return DescribeConsumerResult{}, xerrors.WithStackTrace(
    66  			xerrors.Wrap(
    67  				fmt.Errorf("ydb: describe topic consumer grpc failed: %w", err),
    68  			),
    69  		)
    70  	}
    71  	err = res.FromProto(resp)
    72  
    73  	return res, err
    74  }
    75  
    76  func (c *Client) DropTopic(
    77  	ctx context.Context,
    78  	req DropTopicRequest,
    79  ) (res DropTopicResult, err error) {
    80  	resp, err := c.service.DropTopic(ctx, req.ToProto())
    81  	if err != nil {
    82  		return res, xerrors.WithStackTrace(fmt.Errorf("ydb: drop topic grpc failed: %w", err))
    83  	}
    84  	err = res.FromProto(resp)
    85  
    86  	return res, err
    87  }
    88  
    89  func (c *Client) StreamRead(ctxStreamLifeTime context.Context) (rawtopicreader.StreamReader, error) {
    90  	protoResp, err := c.service.StreamRead(ctxStreamLifeTime)
    91  	if err != nil {
    92  		return rawtopicreader.StreamReader{}, xerrors.WithStackTrace(
    93  			xerrors.Wrap(
    94  				fmt.Errorf("ydb: failed start grpc topic stream read: %w", err),
    95  			),
    96  		)
    97  	}
    98  
    99  	return rawtopicreader.StreamReader{Stream: protoResp}, nil
   100  }
   101  
   102  func (c *Client) StreamWrite(ctxStreamLifeTime context.Context) (*rawtopicwriter.StreamWriter, error) {
   103  	protoResp, err := c.service.StreamWrite(ctxStreamLifeTime)
   104  	if err != nil {
   105  		return nil, xerrors.WithStackTrace(
   106  			xerrors.Wrap(
   107  				fmt.Errorf("ydb: failed start grpc topic stream write: %w", err),
   108  			),
   109  		)
   110  	}
   111  
   112  	return &rawtopicwriter.StreamWriter{Stream: protoResp}, nil
   113  }
   114  
   115  func (c *Client) UpdateOffsetsInTransaction(
   116  	ctx context.Context,
   117  	req *UpdateOffsetsInTransactionRequest,
   118  ) error {
   119  	protoResp, err := c.service.UpdateOffsetsInTransaction(ctx, req.ToProto())
   120  	if err != nil {
   121  		return xerrors.WithStackTrace(fmt.Errorf("ydb: update offsets in transaction failed: %w", err))
   122  	}
   123  
   124  	var operation rawydb.Operation
   125  
   126  	return operation.FromProtoWithStatusCheck(protoResp.GetOperation())
   127  }