| # derive_setters |
| |
| [![Build Status](https://api.travis-ci.com/Lymia/derive_setters.svg?branch=master)](https://travis-ci.com/Lymia/derive_setters) |
| [![Latest Version](https://img.shields.io/crates/v/derive_setters.svg)](https://crates.io/crates/derive_setters) |
| ![Requires rustc 1.56+](https://img.shields.io/badge/rustc-1.56+-red.svg) |
| |
| 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`](https://github.com/colin-kiegel/rust-derive-builder). |
| |
| # Basic usage example |
| |
| ```rust |
| 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 |
| |
| * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or |
| http://www.apache.org/licenses/LICENSE-2.0) |
| * MIT license ([LICENSE-MIT](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. |