7 releases
0.1.6 | May 26, 2023 |
---|---|
0.1.5 | Jan 25, 2021 |
0.1.4 | Mar 29, 2020 |
0.1.2 | Oct 28, 2019 |
#57 in Procedural macros
98,538 downloads per month
Used in 47 crates
(28 directly)
18KB
291 lines
derive_setters
Rust macro to automatically generates setter methods for a struct's fields. This can be used to add setters to a plain data struct, or to help in implementing builders.
For a related library that creates separate builder types, see
rust-derive-builder
.
Basic usage example
use derive_setters::*;
#[derive(Default, Setters, Debug, PartialEq, Eq)]
struct BasicStruct {
#[setters(rename = "test")]
a: u32,
b: u32,
c: u32,
}
assert_eq!(
BasicStruct::default().test(30).b(10).c(20),
BasicStruct { a: 30, b: 10, c: 20 },
);
Additional options
The following options can be set on the entire struct.
#[setters(generate = false)]
causes setter methods to not be generated by default.#[setters(generate_private = false)]
causes setter methods to not be generated by default for private fields.#[setters(generate_public = false)]
causes setter methods to not be generated by default for public fields.#[setters(no_std)]
causes the generated code to usecore
instead ofstd
.#[setters(prefix = "with_")]
causes the setter method on all fields to be prefixed with the given string.#[setters(generate_delegates(ty = "OtherTy", field = "some_field"))]
causes all setter methods on this struct to be duplicated on the target struct, instead modifyingself.some_field
instead ofself
.#[setters(generate_delegates(ty = "OtherTy", method = "get_field"))]
does the same thing as above, except callingget_field
with no arguments instead of directly accessing a field.
The following options can be set on a fields.
#[setters(generate)]
causes a setter method to be generated, overriding struct-level settings.#[setters(skip)]
causes no setter method to be generated.#[setters(rename = "setter_name")]
causes the setter method to have a different name from the field. This overwritesadd_prefix
.
The following options can be set on either the entire struct, or on an individual field. You
can disable the features for a particular field with #[setters(option = false)]
#[setters(into)]
causes the setter method to accept any type that can be converted into the field's type viaInto
.#[setters(strip_option)]
causes the setter method to acceptT
instead ofOption<T>
. If applied to a field that isn't wrapped in anOption
, it does nothing.#[setters(bool)]
causes the setter method to take no arguments, and set the field totrue
.#[setters(borrow_self)]
causes the generated setter method to borrow&mut self
instead of takingself
. This is better for code styles that require mutable setters rather than immutable setters.
License
This project is licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in enumset by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Dependencies
~0.5–1MB
~22K SLoC