Releases: tokio-rs/prost
v0.6.1
PROST! is a Protocol Buffers implementation for the Rust Language. prost
generates simple, idiomatic Rust code from proto2
and proto3
files.
prost
0.6.1 fixes a bug in which decoding untrusted input could overflow the stack. The bug was reported by @dbrgn in #267 (with an attached repro!), and fixed by @danburkert. The fix extended the same recursion limits introduced in #186 by @nrc (released in 0.6.0) to the logic which skips unknown fields during decoding, which became recursive when support was added for decoding groups (also released in 0.6.0). The 0.6.0 release of the prost
crates has been yanked from crates.io.
Additionally, @koushiro updated the private dependencies of all prost
crates to the latest versions.
Many thanks to the generous contributors who have helped out since 0.6.0:
- Dan Burkert
- Danilo Bargen
- Qinxuan Chen
v0.6.0
PROST! is a Protocol Buffers implementation for the Rust Language. prost
generates simple, idiomatic Rust code from proto2
and proto3
files.
prost
0.6.0 includes breaking changes:
- The minimum-supported Rust version (MSRV) is now 1.39.0.
- The
bytes
public dependency version is now0.5
. - The prost-types
Timestamp
andDuration
types now implTryFrom
for their
std::time
equivalents. The old inherenttry_from
methods have been
removed. - Deeply nested messages now fail decoding with an error, instead of potentially
resulting in a stack overflow. The limit is set to a nesting depth of 100, and
the limit can be disabled using a newno-recursion-limit
Cargo feature.
As well as many new (non-breaking) features and improvements:
- @hanya added support for protobuf Group types.
- @danburkert improved the benchmark suite, including adding support for the
full set of upstream message encoding and decoding benchmarks. - @nrc implemented a series of micro-optimizations which result in faster
message encoding and decoding. - @dunmatt improved the method docs on generated types.
- @lukaslueg removed the dependency on
byteorder
. - @parasyte added the
ServiceGenerator::finalize_package
, which is useful for
advanced service generators. - @joelgallant improved the error message that occurs when attempting to compile
.proto files without a package specifier. - @LucioFranco removed the direct dependency of generated types on the
bytes
crate, which means applications which useprost
code generation are no
longer required to declare abytes
dependency. - @ErichDonGubler and @hobofan bumped the
syn
,quote
, andproc-macro2
to stable
versions. - @Timmmm improved
prost-build
so that it no longer writes .rs files when they
are unchanged, which improves working with tools likecargo watch
in
codebases withprost
code generation. - @Hirevo replaced usage of
failure
withanyhow
. - @danburkert bumped the packaged
protoc
version to 3.11.2.
Many thanks to the generous contributors who have helped out since 0.5.0:
- Dan Burkert
- Erich Gubler
- FujiApple
- Hanya
- Jay Oster
- Joel Gallant
- koushiro
- Lucio Franco
- Luffbee
- lukaslueg
- M@ Dunlap
- Maximilian Goisser
- Mikhail Zabaluev
- Nick Cameron
- Nicolas Polomack
- Stephan Wolski
- Tim Hutt
v0.5.0
PROST! is a Protocol Buffers implementation for the Rust Language. prost
generates simple, idiomatic Rust code from proto2
and proto3
files.
prost
0.5.0 should be mostly source-compatible with version 0.4.0, with one exception: prost
0.4.0 escapes field and message names which are Rust keyword by appending a suffix underscore; prost
0.5.0 does not escape field or message names, instead using the new raw-identifier feature. In addition, the minimum rustc
version has been bumped to 1.32.0.
0.5.0 ships with new features and bug fixes:
- @adeschamps fixed a bug which caused enum fields with a default value whose prefix is stripped to be incorrectly generated.
- @danburkert added an option for overriding the code-generation output directory with a new
prost_build::Config::out_dir()
method. - @danburkert added a re-export of
prost-derive
types inprost
. As a result, it should no longer be necessary for applications to depend directly on theprost-derive
crate. - @ebkalderon, @trha, and @danburkert added support to the code generator for referencing
prost
generated types in external crates with a newprost_build::Config::extern_path()
method. - @jeffparsons made code generation more robust by always fully-qualifying standard library types.
- @nrc added support for generating edition-2018 compatible code.
Many thanks to the generous contributors who have helped out since 0.4.0:
- Anthony Deschamps
- Dan Burkert
- Eliza Weisman
- Eyal Kalderon
- Jeff Parsons
- Nick Cameron
- Sebastian Hahn
- Timothy Hobbs
- Trinh Hoang Anh
v0.4.0
PROST! is a Protocol Buffers implementation for the Rust Language. prost
generates simple, idiomatic Rust code from proto2
and proto3
files.
prost
0.4.0 contains new features, bug-fixes, and one breaking change since
0.3.0:
- @briansmith cleaned up the project dependencies and build scripts, resulting
in faster and more robust builds for allprost
users. - @kestred added tag inference on fields in types which derive
Message
.
Tag inference reduces the number annotations necessary when manually writing
message structs. - @warrenfalk added logic to strip the enum name from enum
variants which include the enum name as a prefix. This style is common with
Protobuf (since it's heavily tied to C++ name resolution), however it's
non-idiomatic in Rust. To restore the previous behavior a new Config option is
provided:retain_enum_prefix
. This is a breaking change. - @danburkert added helper methods for working with length delimiters
independently of message encoding and decoding. - And many more bug fixes.
Many thanks to the generous contributors who have helped out since 0.3.0:
- Brian Smith
- Dan Burkert
- Gergely Nagy
- Ivan Mironov
- Kevin Stenerson
- Warren Falk
- YetAnotherMinion
- hcpl
v0.3.0
PROST! is a Protocol Buffers implementation for the Rust Language. prost
generates simple, idiomatic Rust code from proto2
and proto3
files.
prost
0.3.0 contains new features, bug-fixes, and one breaking change since 0.2.0:
- @vorner added an important new feature to
prost-build
which allows custom attributes to be added to generated types. This allows applications to derive traits for generated types, such as SerDe support. - @vorner changed the
Debug
implementation for enumeration fields to be more helpful. - The
prost_build::ServiceGenerator
andprost_build::Config
APIs have been changed to take&mut self
instead of&self
in order to simplify writing stateful service generators.
Many thanks to the wonderful contributors who have pitched-in since 0.2.0:
- Dan Burkert
- Fabrice Desré
- Michal 'vorner' Vaner
- Oliver Gould
v0.2.0
PROST! is a Protocol Buffers implementation for the Rust Language. prost
generates simple, idiomatic Rust code from proto2
and proto3
files.
prost
0.2.0 includes many improvements over the previous version, including:
- The
prost-codegen
crate has been removed, and its functionality has been combined intoprost-build
. - A new crate,
prost-types
, containing Protobuf well-known types has been added. The code generator will automatically useprost-types
when well-known types are encountered during.proto
→.rs
code generation. - Field accessors for proto2 optional fields and enum fields have been made more ergonomic.
prost-build
has a new builder API (prost_build::Config
), which can be used to specify custom code generation options. Current options include:- Using
BTreeMap
instead ofHashMap
for map fields. - Custom code generation for protobuf
service
definitions.
- Using
- New prost-specific error types,
prost::EncodeError
andprost::DecodeError
for encoding and decoding results. - The
prost::Message
trait has been made more flexible, and more ergonomic. - varint encoding and decoding has been optimized, see the following commit messages for results:
- Default values are now preserved during code generation (bugfix).
- New
Message::clear
method.