1

私は内部データ交換のためにグーグルプロトバッファを使用するプロジェクトに取り組んでいます。アドバタイズされたとおりに正常に機能しますが、フィールドが繰り返されているメッセージでは期待どおりに機能しません。次に例を示します。

サンプル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から行を削除してください。

{protobuffs, "0.7.0", {git, "git://github.com/basho/erlang_protobuffs.git", {tag, "0.7.0"}}}
4

1 に答える 1

1

更新のためだけに。

0.7.00.6.0そしてHEADすべて私に上記と同じ問題を与えていました。

#riak IRCについて話し合った後、このコミットハッシュでマークされた安定したリリースを使用する必要があることに気付きましたe0f5f6ea4c3dcb4e7b824496d2b48333fbd5a8c8。これで上記の問題が解決します。

于 2012-09-14T14:21:25.830 に答える