A procedural macro for Rust that enables type-safe builder patterns. This crate enforces required, optional, and conditionally required fields at the type level, ensuring safe and flexible struct construction.
Features
- Per-field control: required, optional, and conditionally required (
required_if) - Compile-time enforcement of builder state using type parameters
- Flexible conditional requirements with AND/OR/NOT expressions
Installation
Add the following to your Cargo.toml:
cargo add typesafe_builder
or
[]
= "*.*.*"
Usage
Required Field
use *;
let user = new.with_name.build;
Optional Field
use *;
let user = new.build;
let user2 = new.with_name.build;
Conditionally Required Field (required_if)
use *;
// The following will not compile because age is required if name is Some:
let user = new.with_name.build;
Complex Conditional Expressions
use *;
// The following will not compile
// because email is required if name and age are Some
let user1 = new.with_name.with_age.build;
// because email is required if name and address are Some
let user2 = new.with_name.with_address.build;
License
MIT