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
11KB
152 lines
constructor-lite
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