我正在开发一个使用 google proto 缓冲区进行内部数据交换的项目。它像宣传的那样工作正常,但是对于其中包含重复字段的消息,它不能按预期工作。这是一个例子:
示例test.proto
文件:
message Test {
optional string t = 1;
}
message Tests {
repeated Test testsList = 1;
}
生成erlang代码:
1> protobuffs_compile:scan_file("test.proto").
=INFO REPORT==== 14-Sep-2012::16:38:25 ===
Writing header file to "test_pb.hrl"
=INFO REPORT==== 14-Sep-2012::16:38:25 ===
Writing beam file to "test_pb.beam"
ok
生成test_pb.hrl
:
-ifndef(TEST_PB_H).
-define(TEST_PB_H, true).
-record(test, {
t
}).
-endif.
-ifndef(TESTS_PB_H).
-define(TESTS_PB_H, true).
-record(tests, {
testslist = []
}).
-endif.
编码:
5> test_pb:encode_tests({tests, [{test, <<"t">>}]}).
<<10,3,10,1,116>>
解码:
6> test_pb:decode_tests(<<10,3,10,1,116>>).
{[{test,"t"}],undefined}
如上例所示,解码不会返回预期的记录元组:
{tests, [{test, <<"t">>}]}
以前有人遇到过类似的问题吗?我在哪里错过了诀窍?任何指示和帮助将不胜感激。
对于版本信息,我的 rebar.config 中的 deps 行:
{protobuffs, "0.7.0", {git, "git://github.com/basho/erlang_protobuffs.git", {tag, "0.7.0"}}}