2个版本

使用旧Rust 2015

0.0.2 2017年10月3日
0.0.1 2016年10月17日

进程宏中排名1465

MIT许可证

17KB
230

Build Status Latest Version

关于

Smelter是一个极轻量级的rust proc_macro库,用于为任意Rust结构派生"Builder"方法。

用法

设置

[dependencies]
smelter = "*"

将以下内容添加到您想要使用smelter的文件中。

#![feature(proc_macro, custom_attribute)]

#[macro_use]
extern crate smelter;

然后只需在结构体上方添加 #[derive(Builder)]

示例

Smelter 生成代码

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

调用

// ... somewhere in your code
     let mut u1 = User::default();
// ...
     u1.with_email_mut("[email protected]".to_string())
      .with_alias_mut("Cardboard box".to_string())
      .with_uid_mut(10u64);
      
// ... somewhere else
    let u2 = User::default()
                .with_email("[email protected]".to_string())
                .with_alias("File Cabinate".to_string())
                .with_uid(10u64);

更多示例

更多示例请参阅test.rs

注意事项

  • 不适用于枚举、单元结构和元组结构。

依赖关系

~1.7–2.6MB
~66K SLoC