# simple-builder A simple implementation of the builder pattern for arbitrary Rust structs. ![badge](https://github.com/Brendan-Blanchard/simple-builder/actions/workflows/main.yml/badge.svg) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/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 ```rust 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 pub toast: Option, pub eggs: Option, pub bacon: Option, } 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); } ```