Cherrypick crate fixes from 36.x to main
Closes #29397
COPYBARA_INTEGRATE_REVIEW=https://github.com/protocolbuffers/protobuf/pull/29397 from protocolbuffers:forward_port_crate_swap 2b5bb9fe65
PiperOrigin-RevId: 970589358
2.1 KiB
The runtime of the official Google Rust Protobuf implementation.
This is currently a beta release: the API is subject to change, and there may be some rough edges, including missing documentation and features.
An example for how to use this crate can be found in the protobuf_example crate
As of V4.36.0, this crate is a shallow wrapper around the google_protobuf
crate that it reexports.
V4 ownership and implementation change
V4 of this crate is officially supported by the Protobuf team at Google. Prior major versions were developed by as a community project by stepancheg who generously donated the crate name to Google.
V4 is a completely new implementation with a different API, as well as a fundamentally different approach than prior versions of this crate. It focuses on delivering a high-quality Rust API which is backed by either a pure C implementation (upb) or the Protobuf C++ implementation. This choice was made for performance, feature parity, development velocity, and security reasons. More discussion about the rationale and design philosophy can be found at https://protobuf.dev/reference/rust/.
It is not planned for the V3 pure Rust lineage to be actively developed going forward. While it is not expected to receive significant further development, as a stable and high quality pure Rust implementation, many open source projects may reasonably continue to stay on the V3 API.
How to get a compatible version of protoc
The protoc binary that you use to generate code needs to have a version that
exactly matches the version of the protobuf crate you are using. More
specifically, if you are using Rust protobuf x.y.z then you need to use protoc
y.z. See here for more
details on our versioning scheme.
The easiest way to get ahold of protoc is to download a prebuilt binary from the
matching release here.
Just make sure protoc is on your $PATH when you run cargo.