
The Phantom Builder in Rust - fanf2
https://wiredforge.com/blog/phantom-builder/index.html
======
saghm
For those who want to use the builder pattern in Rust but don't want to write
the boilerplate, I've found the typed-builder crate
([https://github.com/idanarye/rust-typed-
builder](https://github.com/idanarye/rust-typed-builder)) to be an excellent
solution. It ensures (at compile time!) that you have initialized all the
fields of your struct that are not explicitly marked as having default values.

Disclaimer: I don't have any affiliation with this crate; I'm just a big fan

------
yuchi
As very early rustacean, why using that java-esque pattern when there’s that
awesome Defaults derivable trait?

~~~
tomsmeding
For anyone else who's confused how this presents an alternative to the builder
pattern in the post: Rust's std::default::Default trait can be implemented for
any struct (also automatically derived if you just want the members' standard
default values), and then an instance of the struct can be created with the
following syntax: [1]

    
    
        let instance = YourStruct { foo: 42, ..Default::default() };
    

where 'foo', and possibly more fields, are the ones you want to override from
the default. The rest gets taken from the Default trait specialisation.

Tangential: in Haskell, record types allow a similar sort of trick. If you
have a data type like the following:

    
    
        data D = MakeD { a :: Int, b :: Float }
    

and have a instance of that data type with your default values:

    
    
        defaultD = MakeD { a = 42, b = 3.14 }
    

then you can create another instance of D by selectively overriding stuff from
the already existing instance using similar syntax:

    
    
        someInstance = defaultD { a = 100 }
    

which is equal to MakeD { a = 100, b = 3.14 }.

[1]: adapted from [https://doc.rust-
lang.org/std/default/trait.Default.html](https://doc.rust-
lang.org/std/default/trait.Default.html)

------
spectramax
There comes a point when one recognizes that colors and fancy fonts _impede_
legibility and readability of the code. Skyblue/cyan colors for code against
white background is frankly annoying to read to the point where I closed the
window right away.

