About
This is a rust library to derive "Builder" methods for arbitrary rust structs. It relies on the Macros-1.1 RFC and currently only works with the nightly rust build.
How to use
Setup
[]
= { = "https://github.com/Ivan1931/smelter" }
Add the following to the file in which you with to use smelter.
#![feature(proc_macro, custom_attribute)]
#[macro_use]
extern crate smelter;
Then just add #[derive(Builder)] above your struct,
Simple Example with Generated Code
#[macro_use] extern crate smelter;
#[derive(PartialEq, Debug, Builder, Default)] pub struct Point { pub x: u32, pub y: u32, }
[ allow ( dead_code ) ]
impl Point { pub fn x(self, __value: u32) -> Point { Point { x: __value, ..self } }
pub fn y(self, __value: u32) -> Point {
Point { y: __value, ..self }
}
pub fn x_mut(&mut self, __value: u32) -> &mut Point {
self.x = __value;
self
}
pub fn y_mut(&mut self, __value: u32) -> &mut Point {
self.y = __value;
self
}
}
#[macro_use] extern crate smelter; #[derive(PartialEq, Builder, Default, Debug, Clone)] #[smelter(prefix="with_")] pub struct User { pub uid: u64, pub email: String, pub alias: String, pub friends: Vec, }
// ... somewhere else let u2 = User::default() .with_email("filecabinate@example.com".to_string()) .with_alias("File Cabinate".to_string()) .with_uid(10u64);
## More Examples
For more examples see the [test.rs](https://github.com/Ivan1931/smelter/blob/master/tests/test.rs)
# Caveats
Currently this library will only work on a nightly build of rust.
It relies on [macros 1.1](https://github.com/rust-lang/rfcs/blob/master/text/1681-macros-1.1.md)