The Google Protocol Buffer support in rq
is special because Protobuf
requires an external schema to parse messages.
rq
maintains its own database of Protobuf schemata that is used to
parse messages. You can add a schema to the database and all
definitions in that schema will be made available. The schemata all
share the same namespace so you can't provide conflicting definitions
for messages.
Adding new schemata to the database is simple:
rq protobuf add myschema.proto
This stashes away the schema to be used the next time you run rq
with the -p
flag.
Some schemata need to be in specific directories because of references
by other schema files. rq
will by default use the relative file
name specified in the invocation to save the file internally. That
means that if you call rq
like so:
rq protobuf add foo/bar/schema.proto
...then the schema will be stored internally with the given relative
path of foo/bar/schema.proto
. You can control this behavior with
the --base
flag, so this:
rq protobuf add foo/bar/schema.proto --base foo
...will store the schema as bar/schema.proto
.
You specify the fully qualified message name when deserializing Protobuf:
rq -p .foo.bar.Person
The leading .
is needed to disambiguate namespace/package aliases,
which are yet to be implemented.