simple-builder

Crates.iosimple-builder
lib.rssimple-builder
version0.0.2
sourcesrc
created_at2023-10-12 11:29:37.862378
updated_at2023-10-12 11:29:37.862378
descriptionA procedural macro for creating a builder-pattern struct for any struct.
homepage
repositoryhttps://github.com/Brendan-Blanchard/simple-builder
max_upload_size
id1001218
size11,165
Brendan Blanchard (Brendan-Blanchard)

documentation

README

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);
}
Commit count: 8

cargo fmt