Generates rust code from the proto files.
Protobuf files are collected recursively from $CARGO_MANIFEST_DIR/
/ directory.
Corresponding "cargo:rerun-if-changed=..." line is printed to stdout, so that
the build script running this function is rerun whenever proto files change.
A single rust file is generated and stored at $OUT_DIR//gen.rs file.
Protobuf files are compiled to a protobuf descriptor stored at
$OUT_DIR//gen.binpb.
Additionally a "PROTOBUF_DESCRIPTOR=" line is printed to
stdout. This can be used to collect all the descriptors across the build as follows:
1. Checkout the repo to a fresh directory and then run "cargo build --all-targets"
We need it fresh so that every crate containing protobufs has only one build in the
cargo cache.
2. grep through all target/debug/build/*/output files to find all "PROTOBUF_DESCRIPTOR=..."
lines and merge the descriptor files by simply concatenating them.
Note that you can run this procedure for 2 revisions of the repo and look for breaking
changes by running "buf breaking --against " where before.binpb
and after.binpb are the concatenated descriptors from those 2 revisions.
The proto files are not expected to be self-contained - to import proto files from
different crates you need to specify them as dependencies in the Config.dependencies.
It is not possible to depend on a different proto bundle within the same crate (because
these are being built simultaneously from the same build script).