All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning.
allow
and cfg
attributes from the deriving struct to the builder and its impl block #222#[builder_struct_attr(...)]
impl
block using #[builder_impl_attr(...)]
#[builder(setter(each = "..."))]
and #[builder(setter(each(name = "...")))]
#234Into
using `#[builder(setter(each(name = “...”, into)))] #234 and #214#[builder_field_attr(...)]
and #[builder_setter_attr(...)]
#237derive_builder_core
from derive_builder
#206std
in no_std contexts #204Default
bound #178derive_builder_core
private #189setter(each = "name")
for extension of collection-like fields #199Default
bound #178derive_builder_core
private #189setter(custom)
to allow implementing a custom setter #154darling
dependency to 0.10.2 #153strip_option
flag for setter #116darling
to 0.8.5
and switched to better errorssyn
0.13.10. #120quote
0.5.2 #120Clone
is no longer derived on a builder using the owned pattern unless it has a field override that uses the mutable/immutable pattern. #97#[builder(private)]
at the struct level will now emit a private builder. #99build_fn(private)
to generate a build method only accessible within the mod scope #89darling
0.6.3 #120collections
crate was merged into alloc
(PR). Correspondingly when using this crate within a crate with #![no_std]
you must use #![feature(alloc)] extern crate alloc
in your crate, was #![feature(collections)] extern crate collections
.unused_mut
lint (variable does not need to be mutable) #104#[builder(default)]
and #[builder(default = "...")]
at the struct level change their behaviour and construct a default value for the struct, instead of all fields individually.#[builder(field(public))]
#[builder(setter_prefix = "with")]
, please use #[builder(setter(prefix = "with"))]
insteadT: Clone
type bound in builder impl instead of struct definition #91T: Clone
type bound when it is actually needed, i.e. mutable/immutable pattern, but not owned pattern.#[builder(build_fn(validate = "path::to::fn"))]
#[builder(setter(name = "..."))]
#[builder(build_fn(name = "..."))]
#[builder(build_fn(skip))]
#[builder(derive(Trait1, Trait2, ...))]
#[builder(field(private))]
at the field or struct level#[builder(field(public))]
attribute. To squelch this warning and opt-into the new behaviour, use the private_fields
crate feature or explicitly set field visibility at the struct level.#[builder(try_setter)]
. These setters are exposed alongside the normal field setters and allow callers to pass in values which have fallible conversions to the needed type through TryInto
. This attribute can only be used on nightly when #![feature(try_from)]
is declared in the consuming crate's root; this will change when Rust issue #33417 is resolved.setter(skip)
honors struct-inherited and explicit defaults #68#![no_std]
#63#[builder(default)]
and #[builder(default = "...")]
at the struct level will change their behaviour in 0.5.0 and construct a default value for the struct, instead of all fields individually. To opt into the new behaviour and squelch this deprecation warning you can add the struct_default
feature flag.#[builder(setter(skip))]
#[builder(default = "42")]
or just #[builder(default)]
#[builder(setter_prefix = "with")]
, please use #[builder(setter(prefix = "with"))]
instead#[builder(setter(into))]
features = ["logging"]
to the dependency in Cargo.toml
. Then you can use it like: RUST_LOG=derive_builder=trace cargo test
.#[deny(missing_docs)]
#37#![no_std]
via #[builder(no_std)]
#41Requires Rust 1.15 or newer.
#[builder(pattern = "immutable")]
#[builder(private)]
RUST_LOG=derive_builder=trace cargo test
#[builder(setter_prefix = "with")]
#[builder(name = "MyBuilder")]
FooBuilder
struct to build Foo
=> please refer to the new docs/// ...
#[doc = ...]
#[cfg(...)]
#[allow(...)]