使用protobuff编码记录

时间:2016-04-18 07:17:12

标签: erlang data-transfer protocol-buffers

我希望使用protobuff为erlang编码erlang中的记录数据结构。我还没有找到这样做的功能。

 rd(person, {name = "", phone = [], address}).
 A = #person{phone=[0,8,2,3,4,3,1,2], name="Robert"}.

  protobuffs:encode(1, A, bytes).
  ** exception error: bad argument
  in function  protobuffs:encode_internal/3
    called as protobuffs:encode_internal(1,
                                         #person{
                                          name = "Robert",
                                          phone = [0,8,2,3,4,3,1,2],
                                          address = undefined},
                                         bytes)

   How can I encode a record using protobuff? 

这是我用来编码的模块https://github.com/basho/erlang_protobuffs

谢谢

1 个答案:

答案 0 :(得分:2)

您无法对刚刚定义的任意记录进行编码,这根本不是协议缓冲区在任何语言中的工作方式。

你需要:

  1. .proto文件中定义消息类型(有关语法,支持的类型等,请阅读协议缓冲区文档)。

  2. 从中生成所需语言的代码。在这种情况下,使用自述文件中所示的protobuffs_compile:scan_file(<path-to-your-proto-file>).

  3. 使用生成的代码。它将包含person记录和encode_person功能。