I needed to quickly encode a protobuf from the command-line, and while I pretty much immediately came across `protoc --encode` as the obvious solution, I did not find much documentation on the input textual syntax. Here is the relevant snippet from `protoc --help`: ```text --encode=MESSAGE_TYPE Read a text-format message of the given type from standard input and write it in binary to standard output. The message type must be defined in PROTO_FILES or their imports. ``` Here are a few examples based on some quick experimentation (as opposed to looking at whatever parsing/grammar is used by protoc itself... which would probably have taken a bit more than the few minutes for the experiments below). Assume the following proto def (coming from [prometheus](https://github.com/prometheus/prometheus/blob/master/prompb/types.proto)): ```proto message Query { required int64 start_timestamp_ms = 1; required int64 end_timestamp_ms = 2; repeated prometheus.LabelMatcher matchers = 3; } message LabelMatcher { enum Type { EQ = 0; NEQ = 1; RE = 2; NRE = 3; } Type type = 1; string name = 2; string value = 3; } ``` Then any of the following text snippets are valid input to `protoc --encode` #### `LabelMatcher`: ``` type: EQ name: "foo" value: "bar" ``` ``` type: EQ, name: "foo", value: "bar" ``` ``` type: EQ;name: "foo";value: "bar" ``` (Note the absence of outer curly braces!) #### `Query`: ``` start_timestamp_ms: 0 end_timestamp_ms: 100 matchers: [{type: EQ; name: "bla"; value: 'val'}] ``` ``` start_timestamp_ms: 0 end_timestamp_ms: 100 matchers: [ { type: EQ name: "bla" value: 'val' } ] ```