#builder #struct #object #macro #procedural #proc-macro #required

macro simple-builder-macro

A procedural macro for creating a Builder object for any struct

1 unstable release

0.0.2 Oct 12, 2023

#87 in #required

Download history 8/week @ 2024-02-19 12/week @ 2024-02-26 31/week @ 2024-03-11 15/week @ 2024-03-18 1/week @ 2024-03-25 24/week @ 2024-04-01 10/week @ 2024-04-08 7/week @ 2024-04-15 23/week @ 2024-04-22

64 downloads per month
Used in 2 crates (via simple-builder)

MIT license

11KB
198 lines

simple-builder

A simple implementation of the builder pattern for arbitrary Rust structs.

badge License: MIT

This package could easily be called "yet-another-builder" (YAB for short), but it fills a niche for those looking less for features in a builder implementation, and more for ease of use. In particular this implementation is for you if you have structs with several required fields and many optional ones. Examples of this might be query parameters for endpoints with required fields like a nonce and id, then many optional filtering parameters like start and end dates, price ranges, product types, etc. This macro was purpose built for this very use case.

Example: Simple Use Case

use simple_builder_macro::Builder;

// Debug, PartialEq, Eq are only for assertions
#[derive(Debug, PartialEq, Eq, Builder)]
struct Breakfast {
    #[builder(required)]
    pub coffee: i64, // coffee is required, and therefore not Option<T>
    pub toast: Option<i64>,
    pub eggs: Option<i64>,
    pub bacon: Option<i64>,
}

pub fn main() {
    let desired_breakfast = Breakfast {
        coffee: 1,
        toast: None,
        eggs: Some(3),
        bacon: Some(2),
    };
    
    // semantically equivalent to `Breakfast::builder(16)`
    let mut builder = BreakfastBuilder::new(16);
    let breakfast = builder.eggs(3).bacon(2).build();
    
    assert_eq!(desired_breakfast, breakfast);
}

lib.rs:

A procedural macro for creating a Builder object for any struct. This crate is meant to be used by the simple-builder crate and is not meant for direct consumption.

Dependencies

~320–770KB
~18K SLoC