Skip to content

Releases: tokio-rs/prost

v0.8.0

08 Jul 14:37
Compare
Choose a tag to compare

PROST! is a Protocol Buffers implementation for the Rust Language. prost generates simple, idiomatic Rust code from proto2 and proto3 files.

NOTE: This version contains a security fix for prost-types and is recommend that you upgrade to it from <0.7.

prost 0.8.0 includes breaking changes:

  • Timestamp's From implementation for converting into SystemTime has been converted to a fallible TryFrom implementation.
  • prost-build's compile_protos now takes impl AsRef<Path> to allow each parameter to use its own generic type.
  • Bundled protoc version bumped to 3.15.8

As well as many new (non-breaking) changes:

  • @pluth enabled zero-copy support for Bytes based fields.
  • @sfackler for fixing message optionals and oneofs in prost-build.
  • @rubdos for adding the ability to encode prost messages directly to a Vec<u8>.

and numerous smaller fixes. Many thanks to the generous contributors who have helped out since 0.7:

v0.7.0

27 Dec 23:27
Compare
Choose a tag to compare

PROST! is a Protocol Buffers implementation for the Rust Language. prost generates simple, idiomatic Rust code from proto2 and proto3 files.

prost 0.7.0 includes breaking changes:

  • The minimum-supported Rust version (MSRV) is now 1.46.0.
  • The bytes public dependency version is now 1.0.
  • The bundled protoc version is now 3.14.0.

As well as many new (non-breaking) features and improvements:

  • @hockeybuggy added support for deprecated field annotations.
  • @garbageslam and @dflemstr added no_std support.
  • @joseph-wakeling-frequenz fixed a bug in Timestamp <-> SystemTime conversions.
  • @rolftimmermans added support for generating Rust bytes::Bytes fields from protobuf bytes fields. When deserializing from a Bytes instance, this enables zero-copy deserialization for bytes fields!
  • @olix0r bumped the bytes dependency to 0.6, which included most of the heavy lifting for the subsequent move to bytes 1.0.
  • @danburkert added support for the experimental proto3 optional field presence feature.

and numerous smaller fixes. Many thanks to the generous contributors who have helped out since 0.6.1:

v0.6.1

16 Jan 17:49
Compare
Choose a tag to compare

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

13 Jan 01:15
Compare
Choose a tag to compare

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 now 0.5.
  • The prost-types Timestamp and Duration types now impl TryFrom for their
    std::time equivalents. The old inherent try_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 new no-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 use prost code generation are no
    longer required to declare a bytes dependency.
  • @ErichDonGubler and @hobofan bumped the syn, quote, and proc-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 like cargo watch in
    codebases with prost code generation.
  • @Hirevo replaced usage of failure with anyhow.
  • @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

10 Mar 20:41
Compare
Choose a tag to compare

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 in prost. As a result, it should no longer be necessary for applications to depend directly on the prost-derive crate.
  • @ebkalderon, @trha, and @danburkert added support to the code generator for referencing prost generated types in external crates with a new prost_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

13 Jun 05:08
Compare
Choose a tag to compare

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 all prost 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

29 Jan 02:34
Compare
Choose a tag to compare

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 and prost_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

10 Sep 19:46
Compare
Choose a tag to compare

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 into prost-build.
  • A new crate, prost-types, containing Protobuf well-known types has been added. The code generator will automatically use prost-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 of HashMap for map fields.
    • Custom code generation for protobuf service definitions.
  • New prost-specific error types, prost::EncodeError and prost::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.