我的目标是从现有的 c++ protobuf 消息中恢复其他人编写的丢失的 .proto 文件。通过使用 Descriptor 和 EnumDescriptor 我能够做到以下几点:
const google::protobuf::EnumDescriptor* logOptionDesc =
bgs::protocol::LogOption_descriptor();
std::string logOptionStr = logOptionDesc->DebugString();
bgs::protocol::EntityId entityId;
const google::protobuf::Descriptor* entityIdDesc = entityId.GetDescriptor();
std::string entityIdStr = entityIdDesc->DebugString();
我得到的 logOptionStr 字符串看起来像这样:
enum LogOption {
HIDDEN = 1;
HEX = 2;
}
和 entityIdStr:
message EntityId {
required fixed64 high = 1 [(.bgs.protocol.log) = HEX];
required fixed64 low = 2 [(.bgs.protocol.log) = HEX];
}
请注意,EntityId 消息包含一些字段选项。如果不解决此依赖关系,我将无法生成可以帮助我恢复 .proto 文件的 FileDescriptor。我怀疑 EntityId 字符串应该如下所示:
import "LogOption.proto";
package bgs.protocol;
extend google.protobuf.FieldOptions {
optional LogOptions log = HEX;
}
message EntityId {
required fixed64 high = 1 [(.bgs.protocol.log) = HEX];
required fixed64 low = 2 [(.bgs.protocol.log) = HEX];
}
是否可以恢复需要附加信息(如包、字段选项和导入)的 .proto 文件?我还需要做什么来恢复 .proto 文件?