smelter 0.0.1

Custom derive attribute that automatically derives builder methods
Documentation

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

[dependencies]
smelter = { git = "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)