19 #ifndef GRPCXX_IMPL_CODEGEN_PROTO_UTILS_H
20 #define GRPCXX_IMPL_CODEGEN_PROTO_UTILS_H
22 #include <type_traits>
38 class GrpcBufferWriterPeer;
59 bool Next(
void** data,
int* size)
override {
120 "Couldn't initialize byte buffer reader");
127 bool Next(
const void** data,
int* size)
override {
155 bool Skip(
int count)
override {
158 while (
Next(&data, &size)) {
183 template <
class BufferWriter,
class T>
187 std::is_base_of<protobuf::io::ZeroCopyOutputStream, BufferWriter>::value,
188 "BufferWriter must be a subclass of io::ZeroCopyOutputStream");
190 int byte_size = msg.ByteSize();
202 return msg.SerializeToZeroCopyStream(&writer)
208 template <
class BufferReader,
class T>
212 std::is_base_of<protobuf::io::ZeroCopyInputStream, BufferReader>::value,
213 "BufferReader must be a subclass of io::ZeroCopyInputStream");
214 if (buffer ==
nullptr) {
219 BufferReader reader(buffer);
220 if (!reader.status().ok()) {
221 return reader.status();
224 decoder.SetTotalBytesLimit(INT_MAX, INT_MAX);
225 if (!msg->ParseFromCodedStream(&decoder)) {
228 if (!decoder.ConsumedEntireMessage()) {
240 #ifdef GRPC_OPEN_SOURCE_PROTO
245 class SerializationTraits<T, typename std::enable_if<std::is_base_of<
246 grpc::protobuf::Message, T>::value>::type> {
250 return internal::GenericSerialize<internal::GrpcBufferWriter, T>(
251 msg, bp, own_buffer);
256 return internal::GenericDeserialize<internal::GrpcBufferReader, T>(buffer,
264 #endif // GRPCXX_IMPL_CODEGEN_PROTO_UTILS_H
Status GenericDeserialize(grpc_byte_buffer *buffer, grpc::protobuf::Message *msg)
Definition: proto_utils.h:209
virtual void grpc_slice_buffer_pop(grpc_slice_buffer *sb)=0
virtual grpc_slice grpc_slice_malloc(size_t length)=0
Definition: proto_utils.h:113
~GrpcBufferWriter() override
Definition: proto_utils.h:53
virtual void grpc_byte_buffer_reader_destroy(grpc_byte_buffer_reader *reader)=0
Status status_
Definition: proto_utils.h:179
int64_t byte_count_
Definition: proto_utils.h:106
grpc::protobuf::int64 ByteCount() const override
Definition: proto_utils.h:170
#define GPR_CODEGEN_ASSERT(x)
Codegen specific version of GPR_ASSERT.
Definition: core_codegen_interface.h:135
const int kGrpcBufferWriterMaxBufferLength
Definition: proto_utils.h:40
Status GenericSerialize(const grpc::protobuf::Message &msg, grpc_byte_buffer **bp, bool *own_buffer)
Definition: proto_utils.h:184
A grpc_slice s, if initialized, represents the byte range s.bytes[0..s.length-1]. ...
Definition: slice.h:81
~GrpcBufferReader() override
Definition: proto_utils.h:123
int64_t byte_count_
Definition: proto_utils.h:175
bool Next(const void **data, int *size) override
Definition: proto_utils.h:127
const int total_size_
Definition: proto_utils.h:105
Definition: grpc_types.h:41
grpc_slice backup_slice_
Definition: proto_utils.h:109
#define GRPC_SLICE_START_PTR(slice)
Definition: slice.h:117
bool Skip(int count) override
Definition: proto_utils.h:155
Represents an expandable array of slices, to be interpreted as a single item.
Definition: slice.h:99
#define GRPC_SLICE_END_PTR(slice)
Definition: slice.h:126
void BackUp(int count) override
Definition: proto_utils.h:153
virtual void grpc_byte_buffer_destroy(grpc_byte_buffer *bb)=0
#define GRPC_SLICE_INLINED_SIZE
Definition: slice.h:69
GrpcBufferWriter(grpc_byte_buffer **bp, int block_size, int total_size)
Definition: proto_utils.h:44
::google::protobuf::io::ZeroCopyInputStream ZeroCopyInputStream
Definition: config_protobuf.h:88
struct grpc_slice_refcount * refcount
Definition: slice.h:82
void BackUp(int count) override
Definition: proto_utils.h:83
grpc_slice slice_
Definition: proto_utils.h:178
const int block_size_
Definition: proto_utils.h:104
CoreCodegenInterface * g_core_codegen_interface
Definition: call.h:46
virtual grpc_byte_buffer * grpc_raw_byte_buffer_create(grpc_slice *slice, size_t nslices)=0
Definition: proto_utils.h:42
bool have_backup_
Definition: proto_utils.h:108
friend class GrpcBufferWriterPeer
Definition: proto_utils.h:103
::google::protobuf::int64 int64
Definition: config_protobuf.h:73
grpc_slice slice_
Definition: proto_utils.h:110
virtual grpc_slice grpc_slice_split_tail(grpc_slice *s, size_t split)=0
grpc::protobuf::int64 ByteCount() const override
Definition: proto_utils.h:100
virtual void grpc_slice_unref(grpc_slice slice)=0
bool Next(void **data, int *size) override
Definition: proto_utils.h:59
virtual void grpc_slice_buffer_add(grpc_slice_buffer *sb, grpc_slice slice)=0
bool ok() const
Is the status OK?
Definition: status.h:64
Did it work? If it didn't, why?
Definition: status.h:30
grpc_slice_buffer * slice_buffer_
Definition: proto_utils.h:107
int64_t backup_count_
Definition: proto_utils.h:176
virtual const Status & ok()=0
virtual int grpc_byte_buffer_reader_next(grpc_byte_buffer_reader *reader, grpc_slice *slice)=0
::google::protobuf::io::ZeroCopyOutputStream ZeroCopyOutputStream
Definition: config_protobuf.h:87
#define GRPC_SLICE_LENGTH(slice)
Definition: slice.h:120
GrpcBufferReader(grpc_byte_buffer *buffer)
Definition: proto_utils.h:115
Definition: byte_buffer_reader.h:28
virtual int grpc_byte_buffer_reader_init(grpc_byte_buffer_reader *reader, grpc_byte_buffer *buffer) GRPC_MUST_USE_RESULT=0
Internal errors.
Definition: status_code_enum.h:119
grpc_byte_buffer_reader reader_
Definition: proto_utils.h:177
Status status() const
Definition: proto_utils.h:151
::google::protobuf::Message Message
Definition: config_protobuf.h:72
::google::protobuf::io::CodedInputStream CodedInputStream
Definition: config_protobuf.h:89