protobuf-c:如何打包嵌套消息

时间:2015-05-15 05:41:33

标签: c protocol-buffers

我有一个Protobuf协议文件,如下所示:

message Foo {
    message Bar {
        required string name = 1;
        required string value = 2;
    }

    message Baz {
        required Bar a = 1;
    }
}

鉴于此协议文件,我需要使用protobuf-c(Protobuf的C扩展)编写编码器。我写了以下代码:

Foo myfoo = FOO__INIT;
Foo__Bar mybar = FOO__BAR__INIT;
Foo__Baz mybaz = FOO__BAZ__INIT;
mybaz.a = &mybar;

但是,我现在仍然坚持如何序列化mybaz。生成的Foo结构不包含我可以分配mybaz的任何条目。并没有生成直接打包Baz的方法。

在Python中,由于生成了mybaz.SerializeToString()函数,因此更加简单。我该如何在C中解决这个问题?

1 个答案:

答案 0 :(得分:2)

在Protocol Buffers中声明嵌套类型就像在C ++中声明嵌套类或在Java中声明static内部类。这只是声明一种新类型;它不会向外部类型添加字段。因此,在您的proto架构中,Foo是一个完全空的消息 - 它没有字段。无论您使用哪种编程语言,都是如此。

你打算做的事情可能是这样的:

message Foo {
  message Bar {
    required string name = 1;
    required string value = 2;
  }

  message Baz {
    required Bar a = 1;
  }

  optional Baz baz = 1;
}

现在Foo有一个名为baz的字段,您可以在其中分配Baz个对象。