Skip to content

Commit fe2471a

Browse files
authored
BugFix: fix pb derialization failed at server (#114)
- Enable lite via `option optimize_for = LITE_RUNTIME;` at proto file
1 parent bacbc06 commit fe2471a

File tree

4 files changed

+8
-8
lines changed

4 files changed

+8
-8
lines changed

trpc/server/rpc/unary_rpc_method_handler.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,9 @@ class UnaryRpcMethodHandler : public RpcMethodHandlerInterface {
143143

144144
#ifdef TRPC_PROTO_USE_ARENA
145145
static constexpr bool IsEnablePbArena() {
146-
return std::is_convertible_v<RequestType*, google::protobuf::Message*> &&
146+
return std::is_convertible_v<RequestType*, google::protobuf::MessageLite*> &&
147147
google::protobuf::Arena::is_arena_constructable<RequestType>::value &&
148-
std::is_convertible_v<ResponseType*, google::protobuf::Message*> &&
148+
std::is_convertible_v<ResponseType*, google::protobuf::MessageLite*> &&
149149
google::protobuf::Arena::is_arena_constructable<ResponseType>::value;
150150
}
151151
#endif

trpc/server/server_context.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ void ServerContext::SetDyeingKey(const std::string& key, const std::string& valu
7474
invoke_info_.message_type |= TrpcMessageType::TRPC_DYEING_MESSAGE;
7575
}
7676

77-
void ServerContext::SendUnaryResponse(const Status& status, google::protobuf::Message* pb) {
77+
void ServerContext::SendUnaryResponse(const Status& status, google::protobuf::MessageLite* pb) {
7878
void* rsp_data = static_cast<void*>(pb);
7979
SendUnaryResponse(status, rsp_data, serialization::kPbMessage);
8080
}

trpc/server/server_context.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -513,8 +513,8 @@ class ServerContext : public RefCounted<ServerContext> {
513513
/// @note before calling this method, you should call `SetResponse(false)` in the rpc interface implemented
514514
template <typename T>
515515
void SendUnaryResponse(const Status& status, T& biz_rsp) {
516-
if constexpr (std::is_convertible_v<T*, google::protobuf::Message*>) {
517-
SendUnaryResponse(status, static_cast<google::protobuf::Message*>(&biz_rsp));
516+
if constexpr (std::is_convertible_v<T*, google::protobuf::MessageLite*>) {
517+
SendUnaryResponse(status, static_cast<google::protobuf::MessageLite*>(&biz_rsp));
518518
} else if constexpr (std::is_convertible_v<T*, rapidjson::Document*>) {
519519
SendUnaryResponse(status, static_cast<rapidjson::Document*>(&biz_rsp));
520520
} else if constexpr (std::is_convertible_v<T*, flatbuffers::trpc::MessageFbs*>) {
@@ -600,7 +600,7 @@ class ServerContext : public RefCounted<ServerContext> {
600600

601601
private:
602602
// Implementation of asynchronous packet return on the server side
603-
void SendUnaryResponse(const Status& status, google::protobuf::Message* pb);
603+
void SendUnaryResponse(const Status& status, google::protobuf::MessageLite* pb);
604604

605605
// Implementation of asynchronous packet return on the server side
606606
void SendUnaryResponse(const Status& status, flatbuffers::trpc::MessageFbs* fbs);

trpc/stream/stream.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ class StreamReaderImpl : public RefCounted<StreamReaderImpl<R>> {
7272
private:
7373
inline bool Deserialize(NoncontiguousBuffer* buffer, void* msg) {
7474
serialization::DataType type;
75-
if constexpr (std::is_convertible_v<R*, google::protobuf::Message*>) {
75+
if constexpr (std::is_convertible_v<R*, google::protobuf::MessageLite*>) {
7676
type = serialization::kPbMessage;
7777
} else if constexpr (std::is_convertible_v<R*, rapidjson::Document*>) {
7878
type = serialization::kRapidJson;
@@ -132,7 +132,7 @@ class StreamWriterImpl : public RefCounted<StreamWriterImpl<W>> {
132132
private:
133133
inline bool Serialize(void* msg, NoncontiguousBuffer* buffer) {
134134
serialization::DataType type;
135-
if constexpr (std::is_convertible_v<W*, google::protobuf::Message*>) {
135+
if constexpr (std::is_convertible_v<W*, google::protobuf::MessageLite*>) {
136136
type = serialization::kPbMessage;
137137
} else if constexpr (std::is_convertible_v<W*, rapidjson::Document*>) {
138138
type = serialization::kRapidJson;

0 commit comments

Comments
 (0)