2

我的目标是从现有的 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 文件?

4

0 回答 0