Я использую protobuf-net и ProtoGen.exe
для анализа следующего файла .proto (предоставленного другим проектом)
enum RGBFlags { FLAG_RED = 1; FLAG_GREEN = 2; FLAG_BLUE = 4; }
message SomeMessage {
// Values from RGBFlags only allowed
optional int32 flags = 2;
}
Моим коллегам-программистам на C ++ не важен типбезопасность и обрабатывать поле flags
как простое целое число.Я хотел быть более строгим и стараться избегать такого кода:
SomeMessage foo = new SomeMessage();
foo.flags = (int)RGBFlags.FLAG_BLUE | (int)RGBFlags.FLAG_GREEN;
Я думал, что мог бы использовать пользовательские опции protbuf , чтобы изменить протокод и модифицировать XSLT-преобразование из ProtoGet
для создания необходимых аннотаций `[Flags].
extend google.protobuf.EnumOptions {
optional bool generate_bit_field = 60000;
}
enum RGBFlags {
option (generate_bit_field) = true;
FLAG_RED = 1; FLAG_GREEN = 2; FLAG_BLUE = 4;
}
message SomeMessage {
// Values from RGBFlags only allowed
optional int32 flags = 2;
}
Проблема заключается в том, что все пользовательские параметры отображаются как uninterpreted_option
во временном файле в ProtoGen
.
Есть идеи, что я могу сделать, чтобы получить [Flags]
аннотации в моем коде?