# Protobuf
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
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`.
## Deserializing messages
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.