#constructor #struct-fields #macro-derive #macro #derive

macro constructor-lite

Generate minimal constructors for structs

3 releases (breaking)

0.3.0 Mar 14, 2024
0.2.0 Mar 14, 2024
0.1.0 Feb 26, 2023

#1776 in Rust patterns

MIT license

11KB
152 lines

constructor-lite

Build Status Crates.io Documentation License: LGPL-2.1-or-later

This crate provides the ConstructorLite derive macro for generating minimal constructors for a struct from its fields.

It is primarily designed for structs where deriving Default is not possible because some fields don't implement it.

By default, an associated function new() is generated, which expects every field that is not Option<T> as an argument.

  • To add an optional field to expected arguments of the constructor function, it can be marked with #[constructor(required)].
  • To remove a non-optional field that implements Default from the constructor function, it can be marked with #[constructor(default)].
  • To change the name of the generated function, the struct can be marked with e. g. #[constructor(name = "function_name")].
  • By default, the generated function has the same visibility as the struct. To override this behaviour, the struct can be marked with e. g. #[constructor(visibility = "pub(super)")].

For more advanced uses you might prefer using derive-new or derive_builder instead.

Example

use constructor_lite::ConstructorLite;

#[derive(Debug, PartialEq, ConstructorLite)]
struct Movie {
    title: String,
    year: Option<u16>,
}

assert_eq!(
    Movie::new("Star Wars".to_owned()),
    Movie { title: "Star Wars".to_owned(), year: None },
)

License

This project is licensed under the MIT License.

See LICENSE for more information.

Dependencies

~0.6–1MB
~24K SLoC