0

我正在开发一个具有 google 协议缓冲区的 ruby​​ 应用程序。

我的原型文件:

syntax = 'proto3'

message QuestionMessage {
  int32 id = 1;
  string question = 2;
  int32 font_id = 3;
  repeated int32 answers = 4 [packed=true];
}

当我运行 protoc 时,它确实会生成正确的 ruby​​ 文件,但是对于重复的 int32 命名答案,缺少 :packed => true 。生成的代码:

add_message "QuestionMessage" do
  optional :id, :int32, 1
  optional :question, :string, 2
  optional :font_id, :int32, 3
  repeated :answers, :int32, 4
end

我目前认为我的协议没有为 ruby​​ 文件生成正确的东西存在问题。但奇怪的是我有 libprotoc 版本 3.1.0(从源代码构建),项目的 gemfile 也有 3.1.0 版本,除了生成:packed => true 之外,一切正常(编码和制作对象)。有人可以帮助我吗?我到处找,但甚至找不到有同样问题的人。顺便说一句,添加 :packet => true 不起作用,因为谷歌不喜欢那样。

编辑:
我找到了解决方案。我使用这个gem来生成我的 ruby​​ 协议文件。我可以编辑这些文件,而不是编辑 google-protobuf gem 生成的文件,而你不能。然后我通过脚本添加了 :packed => true 。不是最好的解决方案,但它是一个解决方案..

4

0 回答 0