All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning.
- Allow unquoted expressions in
builder(default = ...)
#331
- Forward default type params #319
- Bump
syn
to version 2 #308 - Bump
darling
to version 0.20.6 #308 - BREAKING CHANGE: Remove support for
field(type = "...")
assyn
no longer allows this. #308 Allow omitting quotes onSee #331builder(default = ...)
expressions #308
- Accept
field(ty = "...")
as an alias forfield(type = "...")
in preparation for moving to syn 2.0, which doesn't allow the use of keywords as meta item paths. #306
- Bump MSRV to 1.56.0
- Add
build_fn(error(validation_error = <bool>))
to disable generation ofValidationError
within the builder's error so thatalloc::string
is avoided. - Add feature
alloc
for controlling linking ofalloc
crate duringno_std
. This way users can useno_std
without providing aglobal_allocator
. - Make try-setters inherit
strip_option
fromsetter
fortry_setter
. Using these settings together previously caused a compile error #284
- Produce error when
default
is used withfield(type = "...")
rather than silently ignoringdefault
#269 - Add support for
crate = "..."
to support re-export scenarios #274
- Allow restricted visibility using
vis = "..."
for builders, build methods, setters, and fields #247 - Allow specifying the type of a builder field using
#[builder(field(type = "..."))]
#246 - Allow specifying how a builder field is built using
#[builder(field(build = "..."))]
#246 - Update
darling
,proc-macro2
,syn
, andquote
dependencies #250
- Forward
allow
andcfg
attributes from the deriving struct to the builder and its impl block #222 - Support passing attributes to the builder struct using
#[builder_struct_attr(...)]
- Support passing attributes to the builder struct's inherent
impl
block using#[builder_impl_attr(...)]
- Support shorthand and long-form collection setters;
#[builder(setter(each = "..."))]
and#[builder(setter(each(name = "...")))]
#234 - Allow collection setters to be generic over
Into
using `#[builder(setter(each(name = "...", into)))] #234 and #214 - Allow specifying attributes for builder fields and setters using
#[builder_field_attr(...)]
and#[builder_setter_attr(...)]
#237
- Don't reference
derive_builder_core
fromderive_builder
#206
- Don't reference
std
in no_std contexts #204
- Requires Rust 1.40.0 or newer (was 1.37.0) #169
- Logging feature is removed #177
- Type parameters no longer have the
Default
bound #178 - Make most of
derive_builder_core
private #189 - Add
setter(each = "name")
for extension of collection-like fields #199
- Requires Rust 1.40.0 or newer (was 1.37.0) #169
- Logging feature is removed #177
- Type parameters no longer have the
Default
bound #178 - Make most of
derive_builder_core
private #189
- Add
setter(custom)
to allow implementing a custom setter #154
- Increase
darling
dependency to 0.10.2 #153
- Increase dependency versions to latest #148
- Requires Rust 1.37.0 or newer (was 1.18.0) #148
- Increase version of derive_builder_core crate to match crate's public interface
- Add
strip_option
flag for setter #116
- Updated
darling
to0.8.5
and switched to better errors
- Updated all dependencies to latest versions #138
- Requires Rust 1.18.0 or newer (was 1.15.0) #120
- Updated to
syn
0.13.10. #120 - Updated to
quote
0.5.2 #120 - Removed support for deprecated attributes #120
Clone
is no longer derived on a builder using the owned pattern unless it has a field override that uses the mutable/immutable pattern. #97- Using
#[builder(private)]
at the struct level will now emit a private builder. #99
- Use
build_fn(private)
to generate a build method only accessible within the mod scope #89
- Rewrote options parser using
darling
0.6.3 #120
- Generated code for structs with type parameters and struct-level defaults now compiles #127
0.5.1 - 2017-12-16
- The standard library
collections
crate was merged intoalloc
(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
0.5.0 - 2017-06-30
#[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 fields are no longer public by default; Fields can be explicitly
made public at the struct or field level using the new attribute:
#[builder(field(public))]
- removed previously deprecated syntax
#[builder(setter_prefix = "with")]
, please use#[builder(setter(prefix = "with"))]
instead
0.4.7 - 2017-04-29
- for generic structs, apply the
T: Clone
type bound in builder impl instead of struct definition #91 - only emit the
T: Clone
type bound when it is actually needed, i.e. mutable/immutable pattern, but not owned pattern.
0.4.6 - 2017-04-26
- pre-build validation via
#[builder(build_fn(validate = "path::to::fn"))]
0.4.5 - 2017-04-25
- customize setter names via
#[builder(setter(name = "..."))]
- customize build_fn name via
#[builder(build_fn(name = "..."))]
- suppress build method generation via
#[builder(build_fn(skip))]
- derive additional traits via
#[builder(derive(Trait1, Trait2, ...))]
- set field visibility separate from setter visibility via
#[builder(field(private))]
at the field or struct level
- builder fields will no longer be public by default in 0.5.0; relying on this
will now emit a deprecation warning. Fields can be explicitly made public at
the struct or field level using the new
#[builder(field(public))]
attribute. To squelch this warning and opt-into the new behaviour, use theprivate_fields
crate feature or explicitly set field visibility at the struct level.
0.4.4 - 2017-04-12
- try_setters, e.g.
#[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 throughTryInto
. 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.
0.4.3 - 2017-04-11
setter(skip)
honors struct-inherited and explicit defaults #68
0.4.2 - 2017-04-10
- support generic references in structs #55
- support
#![no_std]
#63
0.4.1 - 2017-04-08
#[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 thestruct_default
feature flag.
0.4.0 - 2017-03-25
- skip setters, e.g.
#[builder(setter(skip))]
- default values, e.g.
#[builder(default = "42")]
or just#[builder(default)]
- deprecated syntax
#[builder(setter_prefix = "with")]
, please use#[builder(setter(prefix = "with"))]
instead - setter conversions are now off by default, you can opt-into via
#[builder(setter(into))]
- logging is behind a feature flag. To activate it, please add
features = ["logging"]
to the dependency inCargo.toml
. Then you can use it like:RUST_LOG=derive_builder=trace cargo test
.
- use full path for result #39
- support
#[deny(missing_docs)]
#37 - support
#![no_std]
via#[builder(no_std)]
#41
0.3.0 - 2017-02-05
Requires Rust 1.15 or newer.
- different setter pattern, e.g.
#[builder(pattern = "immutable")]
- private setters, e.g.
#[builder(private)]
- additional debug info via env_logger, e.g.
RUST_LOG=derive_builder=trace cargo test
- prefixes, e.g.
#[builder(setter_prefix = "with")]
- field specific overrides
- customize builder name, e.g.
#[builder(name = "MyBuilder")]
- migration to macros 1.1
- migration to traditional builder pattern
i.e. seperate
FooBuilder
struct to buildFoo
=> please refer to the new docs
- missing lifetime support #21
0.2.1 - 2016-09-24
- preserve ordering of attributes #27
0.2.0 - 2016-08-22
- struct fields can be public
- struct fields can have attributes
- the following struct-attributes are copied to the setter-method
/// ...
#[doc = ...]
#[cfg(...)]
#[allow(...)]
- setter-methods are non-consuming now -- breaking change
- setter-methods are public now
- automatic documentation does not work #16
0.1.0 - 2016-08-07
- first implementation
- generate setter methods
- support for generic structs