Skip to content
Snippets Groups Projects
Commit 22dbd73b authored by ncteisen's avatar ncteisen
Browse files

Add static assert to enforce subtype invariant

parent fde16afe
No related branches found
No related tags found
No related merge requests found
...@@ -183,10 +183,12 @@ class GrpcBufferReader : public ::grpc::protobuf::io::ZeroCopyInputStream { ...@@ -183,10 +183,12 @@ class GrpcBufferReader : public ::grpc::protobuf::io::ZeroCopyInputStream {
Status status_; Status status_;
}; };
// BufferWriter must be a subclass of io::ZeroCopyOutputStream.
template <class BufferWriter, class T> template <class BufferWriter, class T>
Status GenericSerialize(const grpc::protobuf::Message& msg, Status GenericSerialize(const grpc::protobuf::Message& msg,
grpc_byte_buffer** bp, bool* own_buffer) { grpc_byte_buffer** bp, bool* own_buffer) {
static_assert(
std::is_base_of<protobuf::io::ZeroCopyOutputStream, BufferWriter>::value,
"BufferWriter must be a subclass of io::ZeroCopyOutputStream");
*own_buffer = true; *own_buffer = true;
int byte_size = msg.ByteSize(); int byte_size = msg.ByteSize();
if (byte_size <= internal::kGrpcBufferWriterMaxBufferLength) { if (byte_size <= internal::kGrpcBufferWriterMaxBufferLength) {
...@@ -205,10 +207,12 @@ Status GenericSerialize(const grpc::protobuf::Message& msg, ...@@ -205,10 +207,12 @@ Status GenericSerialize(const grpc::protobuf::Message& msg,
} }
} }
// BufferReader must be a subclass of io::ZeroCopyInputStream.
template <class BufferReader, class T> template <class BufferReader, class T>
Status GenericDeserialize(grpc_byte_buffer* buffer, Status GenericDeserialize(grpc_byte_buffer* buffer,
grpc::protobuf::Message* msg) { grpc::protobuf::Message* msg) {
static_assert(
std::is_base_of<protobuf::io::ZeroCopyInputStream, BufferReader>::value,
"BufferReader must be a subclass of io::ZeroCopyInputStream");
if (buffer == nullptr) { if (buffer == nullptr) {
return Status(StatusCode::INTERNAL, "No payload"); return Status(StatusCode::INTERNAL, "No payload");
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment