Build Status Latest Version

About

Smelter is an extremely lightweight rust proc_macro library to derive "Builder" methods for arbitrary rust structs.

Usage

Setup

toml [dependencies] smelter = "*"

Add the following to the file in which you with to use smelter.

```

![feature(procmacro, customattribute)]

[macro_use]

extern crate smelter; ```

Then just add #[derive(Builder)] above your struct,

Example

Smelter Generated Code

#![feature(proc_macro, custom_attribute)]

#[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,
}

# [ allow ( dead_code ) ]
impl User {
    pub fn with_uid(self, __value: u64) -> User {
        User { uid: __value, ..self }
    }
    pub fn with_email(self, __value: String) -> User {
        User { email: __value, ..self }
    }
    pub fn with_alias(self, __value: String) -> User {
        User { alias: __value, ..self }
    }
    pub fn with_friends(self, __value: Vec) -> User {
        User { friends: __value, ..self }
    }
    pub fn with_uid_mut(&mut self, __value: u64) -> &mut User {
        self.uid = __value;
        self
    }
    pub fn with_email_mut(&mut self, __value: String) -> &mut User {
        self.email = __value;
        self
    }
    pub fn with_alias_mut(&mut self, __value: String) -> &mut User {
        self.alias = __value;
        self
    }
    pub fn with_friends_mut(&mut self, __value: Vec) -> &mut User {
        self.friends = __value;
        self
    }
}

Invocation

```rust // ... somewhere in your code let mut u1 = User::default(); // ... u1.withemailmut("cardboardbox@example.com".tostring()) .withaliasmut("Cardboard box".tostring()) .withuidmut(10u64);

// ... somewhere else let u2 = User::default() .withemail("filecabinate@example.com".tostring()) .withalias("File Cabinate".tostring()) .with_uid(10u64); ```

More Examples

For more examples see the test.rs

Caveats