diff options
author | heretic <heretic@yandex-team.ru> | 2022-03-25 12:34:53 +0300 |
---|---|---|
committer | heretic <heretic@yandex-team.ru> | 2022-03-25 12:34:53 +0300 |
commit | a41f3739eed6fceb6f62056a7620d220958a47e7 (patch) | |
tree | 278103258b510cb4a96761ea79d6ccd397ca05a0 /contrib/libs/grpc/src/cpp/util/byte_buffer_cc.cc | |
parent | 73d3613a82e5c217fcbe0ab8bbf8120c1ed1af55 (diff) | |
download | ydb-a41f3739eed6fceb6f62056a7620d220958a47e7.tar.gz |
Update grpc to 1.43.2 DTCC-864
ref:50a492c335cda70f458797cf945e49fe739c2715
Diffstat (limited to 'contrib/libs/grpc/src/cpp/util/byte_buffer_cc.cc')
-rw-r--r-- | contrib/libs/grpc/src/cpp/util/byte_buffer_cc.cc | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/contrib/libs/grpc/src/cpp/util/byte_buffer_cc.cc b/contrib/libs/grpc/src/cpp/util/byte_buffer_cc.cc index fb70590645..5c6f22bd7c 100644 --- a/contrib/libs/grpc/src/cpp/util/byte_buffer_cc.cc +++ b/contrib/libs/grpc/src/cpp/util/byte_buffer_cc.cc @@ -25,6 +25,37 @@ namespace grpc { static internal::GrpcLibraryInitializer g_gli_initializer; +Status ByteBuffer::TrySingleSlice(Slice* slice) const { + if (!buffer_) { + return Status(StatusCode::FAILED_PRECONDITION, "Buffer not initialized"); + } + if ((buffer_->type == GRPC_BB_RAW) && + (buffer_->data.raw.compression == GRPC_COMPRESS_NONE) && + (buffer_->data.raw.slice_buffer.count == 1)) { + grpc_slice internal_slice = buffer_->data.raw.slice_buffer.slices[0]; + *slice = Slice(internal_slice, Slice::ADD_REF); + return Status::OK; + } else { + return Status(StatusCode::FAILED_PRECONDITION, + "Buffer isn't made up of a single uncompressed slice."); + } +} + +Status ByteBuffer::DumpToSingleSlice(Slice* slice) const { + if (!buffer_) { + return Status(StatusCode::FAILED_PRECONDITION, "Buffer not initialized"); + } + grpc_byte_buffer_reader reader; + if (!grpc_byte_buffer_reader_init(&reader, buffer_)) { + return Status(StatusCode::INTERNAL, + "Couldn't initialize byte buffer reader"); + } + grpc_slice s = grpc_byte_buffer_reader_readall(&reader); + *slice = Slice(s, Slice::STEAL_REF); + grpc_byte_buffer_reader_destroy(&reader); + return Status::OK; +} + Status ByteBuffer::Dump(std::vector<Slice>* slices) const { slices->clear(); if (!buffer_) { |