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 }