Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Comments in textual serialized protobuf? (not the scheme definition)

I'm using textual protobuf files for system configuration.
One problem I have with this is that the serialized protobuf format does not support comments.
Is there any way around this?
I'm talking about the textual serialized data format, not the scheme definition.
Was this problem solved somewhere by someone?

like image 271
shoosh Avatar asked Sep 06 '11 08:09

shoosh


People also ask

How do I add comments to a proto file?

Adding Comments To add comments to your .proto files, use C/C++-style // and /* ... */ syntax.

What is a Protobuf schema?

A protobuf message format is defined in the .proto file. Protobuf is recommended over other data formats when you need language interoperability, faster serialization and deserialization, type safety, schema adherence between data producer and consumer applications, and reduced coding effort.

What is serialization in Protobuf?

Protocol buffers are a combination of the definition language (created in . proto files), the code that the proto compiler generates to interface with data, language-specific runtime libraries, and the serialization format for data that is written to a file (or sent across a network connection).

Does Protobuf support dictionary?

Protobuf specification now supports dictionaries (maps) natively.


1 Answers

Textual Protobuf format (serialized protobuf messages in text formal) supports comments using the # syntax. I could not find a reference for the same in any online documentation but have used the same in projects in the past so I put together a small example that one can test with:

Sample message description - [SampleProtoSchema.proto]

message SampleProtoSchema {
  optional int32 first_val = 1; // Note: This supports C/C++ style comments
  optional int32 second_val = 2;
}

Sample text message - [SampleTextualProto.prototxt]

# This is how textual protobuf format supports comments
first_val: 12 # can also be inline comments
# This is another comment
second_val: 23

Note though that these comments cannot be generated automatically at time of serialization. They can only be added manually afterwards.
Compile and test:

> protoc --python_out=. SampleProtoSchema.proto
>
> ipython
[1]: import SampleProtoSchema_pb2
[2]: sps = SampleProtoSchema_pb2.SampleProtoSchema()
[3]: from google.protobuf import text_format
[4]: with open('SampleTextualProto.prototxt', 'r') as f:
         text_format.Merge(f.read(), sps)
[5]: sps.first_val
[5]> 12
[6]: sps.second_val
[6]> 23
like image 89
sanchitarora Avatar answered Oct 30 '22 13:10

sanchitarora