#struct-fields #builder-pattern #proc-macro #setter #automatic #generate #methods

macro derive_setters

Rust macro to automatically generates setter methods for a struct's fields

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

Download history 24434/week @ 2024-08-05 23009/week @ 2024-08-12 20606/week @ 2024-08-19 21575/week @ 2024-08-26 21312/week @ 2024-09-02 22177/week @ 2024-09-09 22550/week @ 2024-09-16 25792/week @ 2024-09-23 24212/week @ 2024-09-30 24437/week @ 2024-10-07 23626/week @ 2024-10-14 25262/week @ 2024-10-21 24509/week @ 2024-10-28 23878/week @ 2024-11-04 24617/week @ 2024-11-11 23067/week @ 2024-11-18

98,538 downloads per month
Used in 47 crates (28 directly)

MIT/Apache

18KB
291 lines

derive_setters

Build Status Latest Version Requires rustc 1.56+

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 use core instead of std.
  • #[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 modifying self.some_field instead of self.
  • #[setters(generate_delegates(ty = "OtherTy", method = "get_field"))] does the same thing as above, except calling get_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 overwrites add_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 via Into.
  • #[setters(strip_option)] causes the setter method to accept T instead of Option<T>. If applied to a field that isn't wrapped in an Option, it does nothing.
  • #[setters(bool)] causes the setter method to take no arguments, and set the field to true.
  • #[setters(borrow_self)] causes the generated setter method to borrow &mut self instead of taking self. This is better for code styles that require mutable setters rather than immutable setters.

License

This project is licensed under either of

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