Releases: tokio-rs/prost
Prost version 0.14.1
PROST! is a Protocol Buffers implementation for the Rust Language. prost
generates simple, idiomatic Rust code from proto2
and proto3
files.
⚠️ Revert emission of rerun
commands
Version 0.14.1 reverts the emission of rerun
commands. Other than this change, it is identical to 0.14.0.
In version 0.14.0, prost-build
began emitting rerun
commands. While intended to improve build correctness, this change caused regressions for some users—for example, those generating protos
from an includes
directory. These edge cases are difficult to address reliably, so the change has been rolled back in 0.14.1.
For more details, see issue #1296.
Breaking changes
-
prost: Relax Message Debug trait bound (#1147)
BREAKING CHANGE:
trait Debug
was a supertrait oftrait Message
. This is no longer required byprost
. If your code relies ontrait Debug
being implemented for everyimpl Message
, you must now explicitly state that you require both Debug and Message. For example:where M: Debug + Message
-
prost: Remove prost-derive feature (#1247)
BREAKING CHANGE: Feature flag
prost-derive
is renamed toderive
. Please rename any usage ofprost-derive
feature in yourCargo.toml
. -
prost-build: Prevent repeated fields to be boxed (#1237)
BREAKING CHANGE: A repeated field that is manually marked as boxed was typed as
Vec<Box<T>>
. Those fields are now simply typed asVec<T>
to prevent double indirection. Theboxed
configuration is effectively ignored for repeated fields. -
prost-build: Make
type_name_domain
cumulative (#1228)BREAKING CHANGE: The configuration for domain names of messages is now cumulative. All calls to
prost_build::Config::type_name_domain
are now concatenated. The previous behavior was that only the arguments of the last call were used. If you do multiple calls to type_name_domain, you need to remove all but the last call to maintain the same behavior. -
prost-build: Derive Eq and Hash trait for messages where possible (#1175)
BREAKING CHANGE:
prost-build
will automatically derivetrait Eq
andtrait Hash
for types where all field support those as well. If you manuallyimpl Eq
and/orimpl Hash
for generated types, then you need to remove the manual implementation. If you usetype_attribute
toderive(Eq)
and/orderive(Hash)
, then you need to remove those.
Features
- prost-types: Implement conversion
Duration
to/fromchrono::TimeDelta
(#1236) - prost-build: Prepare for 2024 keyword
gen
(#1257)
Dependencies
- (deps) Update pulldown-cmark to 0.13 (#1259)
- (deps) update criterion requirement from 0.5 to 0.6 (#1280)
Documentation
- Update dead link LICENSE in
prost-types/README.md
(#1262)
Styling
Testing
Prost version 0.14.0
PROST! is a Protocol Buffers implementation for the Rust Language. prost
generates simple, idiomatic Rust code from proto2
and proto3
files.
Breaking changes
-
prost: Relax Message Debug trait bound (#1147)
BREAKING CHANGE:
trait Debug
was a supertrait oftrait Message
. This is no longer required byprost
. If your code relies ontrait Debug
being implemented for everyimpl Message
, you must now explicitly state that you require both Debug and Message. For example:where M: Debug + Message
-
prost: Remove prost-derive feature (#1247)
BREAKING CHANGE: Feature flag
prost-derive
is renamed toderive
. Please rename any usage ofprost-derive
feature in yourCargo.toml
. -
prost-build: Emit
rerun
commands (#1140)BREAKING CHANGE: Previously
cargo
assumed it had to rerunbuild.rs
if any files in the project changed.prost-build
will now emitrerun
commands, which means only the explicitly marked files cause a rerun. If yourbuild.rs
is dependent on any other file paths than those given toprost-build
, then yourbuild.rs
needs to emitrerun
commands as well. -
prost-build: Prevent repeated fields to be boxed (#1237)
BREAKING CHANGE: A repeated field that is manually marked as boxed was typed as
Vec<Box<T>>
. Those fields are now simply typed asVec<T>
to prevent double indirection. Theboxed
configuration is effectively ignored for repeated fields. -
prost-build: Make
type_name_domain
cumulative (#1228)BREAKING CHANGE: The configuration for domain names of messages is now cumulative. All calls to
prost_build::Config::type_name_domain
are now concatenated. The previous behavior was that only the arguments of the last call were used. If you do multiple calls to type_name_domain, you need to remove all but the last call to maintain the same behavior. -
prost-build: Derive Eq and Hash trait for messages where possible (#1175)
BREAKING CHANGE:
prost-build
will automatically derivetrait Eq
andtrait Hash
for types where all field support those as well. If you manuallyimpl Eq
and/orimpl Hash
for generated types, then you need to remove the manual implementation. If you usetype_attribute
toderive(Eq)
and/orderive(Hash)
, then you need to remove those.
Features
- prost-types: Implement conversion
Duration
to/fromchrono::TimeDelta
(#1236) - prost-build: Prepare for 2024 keyword
gen
(#1257)
Dependencies
- (deps) Update pulldown-cmark to 0.13 (#1259)
- (deps) update criterion requirement from 0.5 to 0.6 (#1280)
Documentation
- Update dead link LICENSE in
prost-types/README.md
(#1262)
Styling
Testing
Prost v0.13.5
PROST! is a Protocol Buffers implementation for the Rust Language. prost
generates simple, idiomatic Rust code from proto2
and proto3
files.
Features
- prost-types: Derive Arbitrary (#1188)
Documentation
- Use intra doc links instead of HTML tags (#1219)
Dependencies
- Update pulldown-cmark-to-cmark requirement from >=16, <=19 to >=16, <=20 (#1206)
- Update itertools requirement from >=0.10, <=0.13 to >=0.10, <=0.14 (#1222)
- Update petgraph requirement to include 0.7 (#1226)
- Update rand requirement from 0.8 to 0.9 (#1233)
- Bump clippy to 1.83 (#1220)
- Update flake.lock (#1216)
Styling
Testing
- default_enum_value: Move tests to separate module (#1198)
- nesting: Move tests to separate module (#1218)
- recursive_oneof: Move tests to separate module (#1225)
- boxed_field: Box an oneof field (#1235)
- groups: Move tests to separate module (#1234)
- default_string_escape: Move tests to separate module (#1239)
- Move DecodeError tests closer to the implementation (#1227)
Prost v0.13.4
PROST! is a Protocol Buffers implementation for the Rust Language. prost
generates simple, idiomatic Rust code from proto2
and proto3
files.
Features
- Impl Name for Protobuf well-known wrapper types (#1174)
Performance
- NonZeroU64 to optimize encoded_len_varint (#1192)
Dependencies
- Remove unused
bytes
dependency fromprost-build
(#1169) - Update pulldown-cmark-to-cmark requirement from >=16, <=17 to >=16, <=18 (#1173)
- Update pulldown-cmark-to-cmark requirement from >=16, <=18 to >=16, <=19 (#1195)
- Update protobuf to v25.3 (#1165)
- Update protobuf to v25.4 (#1176)
Styling
Testing
- (boxed_field) Confirm
Foo::bar
is boxed (#1168) - Move build.rs to standard location (#1167)
- (custom_debug) Merge
skip_debug
intocustom_debug
(#1178) - Rename
invalid_doctest
todisable_comments
(#1183) - (custom_attributes) Move module to separate file (#1187)
Build
Prost v0.13.3
PROST! is a Protocol Buffers implementation for the Rust Language. prost
generates simple, idiomatic Rust code from proto2
and proto3
files.
Features
- (prost-types) Add
normalized
functions (#1158)
Bug Fixes
- (prost-build) Remove
derived(Copy)
on boxed fields (#1157)
Documentation
Styling
- Use
Path::display()
when printing a path (#1150) MessageGraph::new()
can't actually fail (#1151)- (generated-code) Use
Self
inas_str_name
(#1154)
Testing
- Actually test
skip_debug
forprost::Oneof
(#1148) - (prost-build) Validate error texts (#1152)
- (prost-build) Fix error texts (#1156)
Build
- Increase MSRV to 1.71.1 (#1135)
- (deps) Update pulldown-cmark to 0.12 and pulldown-cmark-to-cmark to 16 (#1144)
- (protobuf) Compile and install protoc on Windows (#1145)
- (protobuf) Use same
protoc
from same repo as .proto-files (#1136) - (deps) Update pulldown-cmark-to-cmark from 16 to 17 (#1155)
- Unify assert on fixtures (#1142)
v0.13.2
Prost version 0.13.2
PROST! is a Protocol Buffers implementation for the Rust Language. prost
generates simple, idiomatic Rust code from proto2
and proto3
files.
Features
- prost-build: Add protoc executable path to Config (#1126)
- prost-build: Extract file descriptor loading from compile_protos() (#1067)
Bug Fixes
- prost-types: Fix date-time parsing (#1096)
- prost-types: '+' is not a numeric digit (#1104)
- prost-types: Converting DateTime to Timestamp is fallible (#1095)
- prost-types: Parse timestamp with long second fraction (#1106)
- prost-types: Format negative fractional duration (#1110)
- prost-types: Allow unknown local time offset (#1109)
Styling
- Remove use of legacy numeric constants (#1089)
- Move encoding functions into separate modules (#1111)
- Remove needless borrow (#1122)
Testing
- Add tests for public interface of DecodeError (#1120)
- Add
parse_date
fuzzing target (#1127) - Fix build without std (#1134)
- Change some proptest to kani proofs (#1133)
- Add
parse_duration
fuzzing target (#1129) - fuzz: Fix building of fuzzing targets (#1107)
- fuzz: Add fuzz targets to workspace (#1117)
Miscellaneous Tasks
- Move old protobuf benchmark into prost (#1100)
- Remove allow clippy::derive_partial_eq_without_eq (#1115)
- Run
cargo test
withoutall-targets
(#1118) - dependabot: Add github actions (#1121)
- Update to cargo clippy version 1.80 (#1128)
Build
- Use
proc-macro
in Cargo.toml (#1102) - Ignore missing features in
tests
crates (#1101) - Use separated build directory for protobuf (#1103)
- protobuf: Don't install unused test proto (#1116)
- protobuf: Use crate
cmake
(#1137) - deps: Update devcontainer to Debian Bookworm release (#1114)
- deps: Bump actions/upload-artifact from 3 to 4 (#1123)
- deps: Bump baptiste0928/cargo-install from 2 to 3 (#1124)
- deps: bump model-checking/kani-github-action from 0.32 to 1.1 (#1125)
v0.13.1
Prost version 0.13.1
PROST! is a Protocol Buffers implementation for the Rust Language. prost
generates simple, idiomatic Rust code from proto2
and proto3
files.
Bug fixes
- Enum variant named Error causes ambiguous item (#1098)
v0.13.0
PROST version 0.13.0
PROST! is a Protocol Buffers implementation for the Rust Language. prost
generates simple, idiomatic Rust code from proto2
and proto3
files.
This major update brings new features and fixes:
Breaking changes
-
derive Copy trait for messages where possible (#950)
prost-build
will automatically derivetrait Copy
for some messages. If you manually implementCopy
you should remove your implementation. -
Change generated functions signatures to remove type parameters (#1045)
The function signature of
trait Message
is changed to useimpl Buf
instead of a named generic type. If you implementtrait Message
, you should change the function signature. -
Lightweight error value in TryFrom for enums (#1010)
When a
impl TryFrom<i32>
is generated byprost
derive macros, it will now return the error typeUnknownEnumValue
instead ofDecodeError
. The new error can be used to retreive the integer value that failed to convert.
Features
-
fix: Only touch include file if contents is changed (#1058)
Most generated files are untouched when the contents doesn't change. Use the same mechanism for include file as well.
Dependencies
- update env_logger requirement from 0.10 to 0.11 (#1074)
- update criterion requirement from 0.4 to 0.5 (#1071)
- Remove unused libz-sys (#1077)
- build(deps): update itertools requirement from >=0.10, <=0.12 to >=0.10, <=0.13 (#1070)
Documentation
- better checking of tag duplicates, avoid discarding invalid variant errs (#951)
- docs: Fix broken link warnings (#1056)
- Add missing LICENSE symlink (#1086)
Internal
- workspace package metadata (#1036)
- fix: Build error due to merge conflict (#1068)
- build: Fix release scripts (#1055)
- chore: Add ci to check MSRV (#1057)
- ci: Add all tests pass job (#1069)
- ci: Add Dependabot (#957)
- ci: Ensure both README are the same and prost version is correct (#1078)
- ci: Set rust version of clippy job to a fixed version (#1090)
v0.12.6
PROST! is a Protocol Buffers implementation for the Rust Language. prost
generates simple, idiomatic Rust code from proto2
and proto3
files.
This patch update fixes a regression:
- fix(prost-build): re-export
error_message_protoc_not_found
,protoc_from_env
&protoc_include_from_env
(#1063)
v0.12.5
PROST! is a Protocol Buffers implementation for the Rust Language. prost
generates simple, idiomatic Rust code from proto2
and proto3
files.
This patch update brings new fixes:
- fix: include_file should handle proto without package (#1002)
- Place Config::format behind the format feature flag
- Handle keyword
Self
after stripping enum type prefix (#998)
Documentation
- fix(readme): fix the link and badge for CI (#1049)
Internal
- style(codegen):
Syntax
to a separate file (#1029) - chore(codegen): extract c string escaping to a separate file (#1028)
- style(prost-build):
CodeGenerator::boxed
method (#1019) - style(prost-build): Consolidate field data into struct (#1017)
- style(prost-build):
BytesType and MapType
into acollections
module. (#1030) - style(prost-build): Split
Config
andModule
into a separate module and files (#1020) - style(prost-build): prost_path helper (#1018)
- style: Fix toml indent (#1048)
- style: Fix clippy warnings and enable clippy in CI (#1008)
- build: Use git submodule to download protobuf sources (#1014)
- ci: Add TOML validation with
taplo
(#1034) - tests: Create a separate tempdir for each test (#1044)
- tests: Remove GoogleMessage3 and GoogleMessage4 benchmarks (#1037)
- chore: Update internal crates to Rust edition 2021 (#1039)
- chore: Update crate descriptions (#1038)
- chore: Fix clippy checks in CI (#1032)
- chore: Add Casper Meijn as author (#1025)