| 70 | } |
| 71 | |
| 72 | static bool Decompress(const butil::IOBuf& data, google::protobuf::Message* msg, |
| 73 | google::protobuf::io::GzipInputStream::Format format) { |
| 74 | butil::IOBufAsZeroCopyInputStream wrapper(data); |
| 75 | google::protobuf::io::GzipInputStream gzip(&wrapper, format); |
| 76 | bool ok; |
| 77 | if (msg->GetDescriptor() == Deserializer::descriptor()) { |
| 78 | ok = ((Deserializer*)msg)->DeserializeFrom(&gzip); |
| 79 | } else { |
| 80 | ok = msg->ParseFromZeroCopyStream(&gzip); |
| 81 | } |
| 82 | if (!ok) { |
| 83 | LOG(WARNING) << "Fail to deserialize input message=" |
| 84 | << msg->GetDescriptor()->full_name() |
| 85 | << ", format=" << Format2CStr(format) << " : " |
| 86 | << (NULL == gzip.ZlibErrorMessage() ? "" : gzip.ZlibErrorMessage()); |
| 87 | } |
| 88 | return ok; |
| 89 | } |
| 90 | |
| 91 | bool GzipCompress(const google::protobuf::Message& msg, butil::IOBuf* buf) { |
| 92 | return Compress(msg, buf, google::protobuf::io::GzipOutputStream::GZIP); |
no test coverage detected