PROST! is a Protocol Buffers implementation for the Rust Language. prost generates simple, idiomatic Rust code from proto2 and proto3 files.
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.
-
prost: Relax Message Debug trait bound (#1147)
BREAKING CHANGE:
trait Debugwas a supertrait oftrait Message. This is no longer required byprost. If your code relies ontrait Debugbeing 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-deriveis renamed toderive. Please rename any usage ofprost-derivefeature 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. Theboxedconfiguration is effectively ignored for repeated fields. -
prost-build: Make
type_name_domaincumulative (#1228)BREAKING CHANGE: The configuration for domain names of messages is now cumulative. All calls to
prost_build::Config::type_name_domainare 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-buildwill automatically derivetrait Eqandtrait Hashfor types where all field support those as well. If you manuallyimpl Eqand/orimpl Hashfor generated types, then you need to remove the manual implementation. If you usetype_attributetoderive(Eq)and/orderive(Hash), then you need to remove those.
- prost-types: Implement conversion
Durationto/fromchrono::TimeDelta(#1236) - prost-build: Prepare for 2024 keyword
gen(#1257)
- (deps) Update pulldown-cmark to 0.13 (#1259)
- (deps) update criterion requirement from 0.5 to 0.6 (#1280)
- Update dead link LICENSE in
prost-types/README.md(#1262)
- Use DoubleEndedIterator::next_back (#1255)
- Fix typo (#1260)
- Run tests using edition 2024 (#1254)
- Run clippy with edition 2024 enabled (#1256)
PROST! is a Protocol Buffers implementation for the Rust Language. prost generates simple, idiomatic Rust code from proto2 and proto3 files.
-
prost: Relax Message Debug trait bound (#1147)
BREAKING CHANGE:
trait Debugwas a supertrait oftrait Message. This is no longer required byprost. If your code relies ontrait Debugbeing 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-deriveis renamed toderive. Please rename any usage ofprost-derivefeature in yourCargo.toml. -
prost-build: Emit
reruncommands (#1140)BREAKING CHANGE: Previously
cargoassumed it had to rerunbuild.rsif any files in the project changed.prost-buildwill now emitreruncommands, which means only the explicitly marked files cause a rerun. If yourbuild.rsis dependent on any other file paths than those given toprost-build, then yourbuild.rsneeds to emitreruncommands 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. Theboxedconfiguration is effectively ignored for repeated fields. -
prost-build: Make
type_name_domaincumulative (#1228)BREAKING CHANGE: The configuration for domain names of messages is now cumulative. All calls to
prost_build::Config::type_name_domainare 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-buildwill automatically derivetrait Eqandtrait Hashfor types where all field support those as well. If you manuallyimpl Eqand/orimpl Hashfor generated types, then you need to remove the manual implementation. If you usetype_attributetoderive(Eq)and/orderive(Hash), then you need to remove those.
- prost-types: Implement conversion
Durationto/fromchrono::TimeDelta(#1236) - prost-build: Prepare for 2024 keyword
gen(#1257)
- (deps) Update pulldown-cmark to 0.13 (#1259)
- (deps) update criterion requirement from 0.5 to 0.6 (#1280)
- Update dead link LICENSE in
prost-types/README.md(#1262)
- Use DoubleEndedIterator::next_back (#1255)
- Fix typo (#1260)
- Run tests using edition 2024 (#1254)
- Run clippy with edition 2024 enabled (#1256)
PROST! is a Protocol Buffers implementation for the Rust Language. prost generates simple, idiomatic Rust code from proto2 and proto3 files.
- prost-types: Derive Arbitrary (#1188)
- Use intra doc links instead of HTML tags (#1219)
- 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)
- Replace unnecessary
map_or(#1221) - prost-build: Use enum getter (#1238)
- 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! is a Protocol Buffers implementation for the Rust Language. prost generates simple, idiomatic Rust code from proto2 and proto3 files.
- Impl Name for Protobuf well-known wrapper types (#1174)
- NonZeroU64 to optimize encoded_len_varint (#1192)
- Remove unused
bytesdependency 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)
- Remove explicit lifetimes (#1180)
- Remove unnecessary empty line after document (#1181)
- (boxed_field) Confirm
Foo::baris boxed (#1168) - Move build.rs to standard location (#1167)
- (custom_debug) Merge
skip_debugintocustom_debug(#1178) - Rename
invalid_doctesttodisable_comments(#1183) - (custom_attributes) Move module to separate file (#1187)
- Bump clippy version to 1.82 (#1182)
- Restrict permissions of
GITHUB_TOKEN(#1189)
PROST! is a Protocol Buffers implementation for the Rust Language. prost generates simple, idiomatic Rust code from proto2 and proto3 files.
- (prost-types) Add
normalizedfunctions (#1158)
- (prost-build) Remove
derived(Copy)on boxed fields (#1157)
- (prost-types) Add description of using Any (#1141)
- (prost-build) Use
cargo addin example (#1149)
- Use
Path::display()when printing a path (#1150) MessageGraph::new()can't actually fail (#1151)- (generated-code) Use
Selfinas_str_name(#1154)
- Actually test
skip_debugforprost::Oneof(#1148) - (prost-build) Validate error texts (#1152)
- (prost-build) Fix error texts (#1156)
- 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
protocfrom same repo as .proto-files (#1136) - (deps) Update pulldown-cmark-to-cmark from 16 to 17 (#1155)
- Unify assert on fixtures (#1142)
PROST! is a Protocol Buffers implementation for the Rust Language. prost generates simple, idiomatic Rust code from proto2 and proto3 files.
- prost-build: Add protoc executable path to Config (#1126)
- prost-build: Extract file descriptor loading from compile_protos() (#1067)
- 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)
- Remove use of legacy numeric constants (#1089)
- Move encoding functions into separate modules (#1111)
- Remove needless borrow (#1122)
- Add tests for public interface of DecodeError (#1120)
- Add
parse_datefuzzing target (#1127) - Fix build without std (#1134)
- Change some proptest to kani proofs (#1133)
- Add
parse_durationfuzzing target (#1129) - fuzz: Fix building of fuzzing targets (#1107)
- fuzz: Add fuzz targets to workspace (#1117)
- Move old protobuf benchmark into prost (#1100)
- Remove allow clippy::derive_partial_eq_without_eq (#1115)
- Run
cargo testwithoutall-targets(#1118) - dependabot: Add github actions (#1121)
- Update to cargo clippy version 1.80 (#1128)
- Use
proc-macroin Cargo.toml (#1102) - Ignore missing features in
testscrates (#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)
PROST! is a Protocol Buffers implementation for the Rust Language. prost generates simple, idiomatic Rust code from proto2 and proto3 files.
- Enum variant named Error causes ambiguous item (#1098)
note: this version was yanked in favor of 0.13.1
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:
-
derive Copy trait for messages where possible (#950)
prost-buildwill automatically derivetrait Copyfor some messages. If you manually implementCopyyou should remove your implementation. -
Change generated functions signatures to remove type parameters (#1045)
The function signature of
trait Messageis changed to useimpl Bufinstead 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 byprostderive macros, it will now return the error typeUnknownEnumValueinstead ofDecodeError. The new error can be used to retreive the integer value that failed to convert.
-
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.
- 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)
- better checking of tag duplicates, avoid discarding invalid variant errs (#951)
- docs: Fix broken link warnings (#1056)
- Add missing LICENSE symlink (#1086)
- 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)