chore(deps): update rust crate bon to v3 #498
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
2.2.1
->3.0.0
Release Notes
elastio/bon (bon)
v3.0.1
Compare Source
Fixed
v3.0.0
Compare Source
See the most interesting changes described in Bon 3.0 Release blog post.
All the breaking changes are very unlikely to actually break your code that was written against the
v2
version ofbon
. 99% of users should be able to update without any migration.Changed
🎉🎉 Stabilize the builder's typestate API allowing for custom builder extensions. This is the main theme of this release. This new API brings the flexibility to a whole new level 🚀 🚀 (#145)
Improve rustdoc output. See the rustoc examples and comparison in the Alternatives section (#145)
Add info that the member is required or optional.
For members with default values show the default value in the docs.
For optional members provide links to
{member}(T)
andmaybe_{member}(Option<T>)
setters.Remove
__
prefixes for generic types and lifetimes from internal symbols. Instead, the prefixes added only if the macro detects a name collision.#[builder()]
or#[builder]
with no parameters on a member (#145)builder_type
,finish_fn
,start_fn
andon
attributes syntax. Only parentheses are accepted e.g.#[builder(finish_fn(...))]
or#[builder(on(...))]
. This no longer works:#[builder(finish_fn[...])]
or#[builder(on{...})]
(#145)on(...)
clauses. For example, the following now generates a compile error:#[builder(on(String, into), finish_fn = build, on(Vec<_>, into))]
, because there is afinish_fn = ...
betweenon(...)
clauses. (#155)#[builder(derive(Clone, Debug))]
now generates impl blocks that follow the behaviour of standardClone
andDebug
derives in that it conservatively addsClone/Debug
trait bounds for all the generic types declared on the original item (struct or function). Previously no additional bounds were required onClone
andDebug
impls. See the Added section for details on the way to override these bounds with#[builder(derive(Clone/Debug(bounds(...))))]
(#145)builder
changed fromTBuilderBuilder
to justTBuilder
making methods namedbuilder
work the same as methods namednew
. (#145)This is because the types of the builders returned from the branches are the following:
FooBuilder<SetB<SetA>>
(if
branch)FooBuilder<SetA<SetB>>
(else
branch)We believe such code should generally be very rare and even if it breaks, it's easy to fix it by reordering the setter method calls. This compromise was accepted as a design tradeoff such that the builder's type signature becomes simpler, the generated documentation becomes much less noisy, it removes an annoying special case for the builder of just one member, and it improves the type-checking performance considerably compared to the previous approach that used tuples to represent the type state. (#145)
Removed
#[bon::builder]
proc-macro attribute on top of astruct
. Use#[derive(bon::Builder)]
for that instead. This syntax has been deprecated since2.1
and it is now removed as part of a major version cleanup (#145)#[builder(expose_positional_fn = positional_fn_name)]
attribute. Use#[builder(start_fn = builder_fn_name)]
instead, since this attribute works additively keeping the function with positional arguments under the attribute unchanged. (#153)Added
mod builder_name {}
wherebuilder_name
is the snake_case version of the name of the builder struct. This new module contains the type state API of the builder. There is a low probability that this new module name may conflict with existing symbols in your scope, so this change is marked as breaking (#145)Add
#[builder(builder_type(vis = "...", doc { ... }))]
that allows overriding the visibility and docs of the builder struct (#145)Add
#[builder(finish_fn(vis = "...", doc { ... } ))]
that allows overriding the visibility and docs of the finishing function (#145)Add
#[builder(start_fn(doc { ... }))]
that allows overriding the docs of the starting function (#145)Add
#[builder(with = closure)]
syntax to customize setters with a closure. If the closure returns aResult<_, E>
the setters become fallible (#145)Add
#[builder(with = Some)]
,#[builder(with = FromIterator::from_iter)]
,#[builder(with = <_>::from_iter)]
syntax support for two well-known functions that will probably be used frequently (#157)Add
#[builder(required)]
forOption
fields to opt out from their special handling which makesbon
treat them as regular required fields. It's also available at the top-level via#[builder(on(_, required))]
(#145, #155)Add
#[builder(crate = path::to::bon)]
and#[bon(crate = path::to::bon)]
to allow overriding the path tobon
crate used in the generated code, which is useful for the cases whenbon
macros are wrapped by other macros (#153)Add
#[builder(state_mod)]
to configure the builder's type state API module name, visibility and docs (#145)🔬 Experimental. Add
#[builder(overwritable)]
and#[builder(on(..., overwritable)]
to make it possible to call setters multiple times for the same member. This attribute is available under the cargo feature"experimental-overwritable"
. The fate of this feature depends on your feedback in the tracking issue #149. Please, let us know if you have a use case for this attribute! (#145)Add
#[builder(setters)]
to fine-tune the setters names, visibility and docs (#145)Add
#[builder(derive(Clone/Debug(bounds(...))]
to allow overriding trait bounds on theClone/Debug
impl block of the builder (#145)Add inheritance of
#[allow()]
and#[expect()]
lint attributes to all generated items. This is useful to suppress any lints coming from the generated code. Although, lints coming from the generated code are generally considered defects inbon
and should be reported via a Github issue, but this provides an easy temporary workaround for the problem (#145)Fixed
unused_mut
lints coming from#[builder]
on a method that takesmut self
(#197)#[cfg/cfg_attr()]
not being expanded when used on function arguments with doc comments or other attributes (#145)Other
bon
macro panics due to an internal bug, the macro will try to generate a fallback for IDEs to still provide intellisense (#145)elastio.github.io/bon
to a custom domainbon-rs.com
(#158)umami
for the docs website (#158)Docs
Refactor the README.md and all pages in the Guide Book by simplifying them and removing redundancies (#170)
Add new pages to the Guide Book:
Custom Conversions (#170)
Typestate API (#170)
Builder's Type Signature (#170)
Custom Methods (#171)
Optional Generic Members (#173)
Compilation Benchmarks (#177)
Split API reference into multiple pages. The root page now contains a convenient table with short descriptions of all available configuration attributes (#164)
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.