Моя цель — восстановить потерянные файлы .proto, написанные кем-то еще, из существующих сообщений C ++ protobuf. Используя дескриптор и 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 содержит некоторые параметры поля. Без разрешения этой зависимости я не могу сгенерировать FileDescriptor, который может помочь мне восстановить файлы .proto. Я подозреваю, что строка 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?
Задача ещё не решена.
Других решений пока нет …