Type Safe Builder Patterns

Infallible compile-time checked builders for your structs.

License: GPL v3

No more worrying whether the build call on your builder will return Ok or not. Maybe you forgot to set a field? typesafe-builders solves this by using the Rust type-system to ensure correct usage.

Example

```rust fn example() { #[derive(Builder)] struct Point { x: u8, y: u8, #[optional] z: Option, }

let builder = Point::builder();
let partial = builder.x(5);
// These do not compile:
// partial.x(6);        // `x` is already set
// partial.build();     // `y` is not set

// Set all required fields to enable the `build` function:
let complete = partial.y(8);
let result = complete.build();

assert_eq!(result.x, 5);
assert_eq!(result.y, 8);
assert_eq!(result.z, None);

} ```

Field Attributes

How does it work?

Const generic one-hot bitfields. What you get is similar to this:

```rust pub struct Builder { x: Option, y: Option, }

impl Builder { fn set_x(self, x: u8) -> Builder

impl Builder { fn set_y(self, y: u8) -> Builder { … } }

// The build function is only available once all fields are set: impl Builder { fn build() {

}

} ```

TODOS