|
|
|
@ -188,9 +188,14 @@ Status GenericSerialize(const grpc::protobuf::Message& msg, |
|
|
|
|
"BufferWriter must be a subclass of io::ZeroCopyOutputStream"); |
|
|
|
|
*own_buffer = true; |
|
|
|
|
int byte_size = msg.ByteSize(); |
|
|
|
|
if (byte_size == 0) { |
|
|
|
|
grpc_slice empty_slice = g_core_codegen_interface->grpc_empty_slice(); |
|
|
|
|
*bp = g_core_codegen_interface->grpc_raw_byte_buffer_create(&empty_slice, 1); |
|
|
|
|
if ((size_t)byte_size <= GRPC_SLICE_INLINED_SIZE) { |
|
|
|
|
grpc_slice slice = g_core_codegen_interface->grpc_slice_malloc(byte_size); |
|
|
|
|
GPR_CODEGEN_ASSERT( |
|
|
|
|
GRPC_SLICE_END_PTR(slice) == |
|
|
|
|
msg.SerializeWithCachedSizesToArray(GRPC_SLICE_START_PTR(slice))); |
|
|
|
|
*bp = g_core_codegen_interface->grpc_raw_byte_buffer_create(&slice, 1); |
|
|
|
|
g_core_codegen_interface->grpc_slice_unref(slice); |
|
|
|
|
|
|
|
|
|
return g_core_codegen_interface->ok(); |
|
|
|
|
} |
|
|
|
|
BufferWriter writer(bp, kGrpcBufferWriterMaxBufferLength, byte_size); |
|
|
|
|