useless_setter_maker

Crates.iouseless_setter_maker
lib.rsuseless_setter_maker
version2.0.0
created_at2025-04-08 08:57:47.127191+00
updated_at2025-05-26 07:12:08.680009+00
descriptionMacro for generating setter methods.
homepage
repositoryhttps://github.com/madnoberson/useless-macros
max_upload_size
id1625208
size34,862
Egor (madnoberson)

documentation

README

Useless Setter Maker

Crate version License Rust version Status of passing 'lint-and-test' workflow

A procedural macro crate for generating setter methods for Rust structs.

License

This project is licensed under the Apache 2.0 License. See the LICENSE file for details.

Examples

Builder setters

use useless_setter_maker::make_builder_setters;

#[make_builder_setters]
#[derive(Debug, PartialEq, Default)]
struct Config {
    #[builder_setter(prefix = "set", visibility = "pub")]
    host: String,
    
    #[builder_setter(suffix = "number", visibility = "pub(crate)")]
    port: u16,
    
    #[builder_setter(name = "enable_logging")]
    #[builder_setter(name = "install_logging")]
    logging: bool,
    
    #[disable_builder_setters]
    internal: bool,

    #[builder_setter(with_into = false)]
    updated_at: Option<String>,
}

let config = Config::default()
    .set_host("localhost")                    // Pub
    .with_number(8080 as u16)                 // Pub(crate)
    .enable_logging(true)                     // Pub, first logging setter  
    .install_logging(true)                    // Pub, second logging setter
    .with_updated_at(String::from("today"));  // Pub
    
assert_eq!(config.host, "localhost");
assert_eq!(config.port, 8080);
assert_eq!(config.logging, true);
assert_eq!(config.internal, false);
assert_eq!(config.updated_at, Some(String::from("today")));

Basic setters

use useless_setter_maker::make_basic_setters;

#[make_basic_setters]
#[derive(Debug, PartialEq, Default)]
struct Config {
    #[basic_setter(prefix = "with", visibility = "pub")]
    host: String,
    
    #[basic_setter(suffix = "number", visibility = "pub(crate)")]
    port: u16,
    
    #[basic_setter(name = "enable_logging")]
    #[basic_setter(name = "install_logging")]
    logging: bool,
    
    #[disable_basic_setters]
    internal: bool,

    #[basic_setter(with_into = false)]
    updated_at: Option<String>,
}

let mut config = Config::default();

config.with_host("localhost");                  // Pub
config.set_number(8080 as u16);                 // Pub(crate)
config.enable_logging(true);                    // Pub, first logging setter  
config.install_logging(true);                   // Pub, second logging setter
config.set_updated_at(String::from("today"));   // Pub
    
assert_eq!(config.host, "localhost");
assert_eq!(config.port, 8080);
assert_eq!(config.logging, true);
assert_eq!(config.internal, false);
assert_eq!(config.updated_at, Some(String::from("today")));
Commit count: 40

cargo fmt