2个版本
使用旧Rust 2015
0.0.2 | 2017年10月3日 |
---|---|
0.0.1 | 2016年10月17日 |
在进程宏中排名1465
17KB
230 行
关于
Smelter是一个极轻量级的rust proc_macro库,用于为任意Rust结构派生"Builder"方法。
用法
设置
[dependencies]
smelter = "*"
将以下内容添加到您想要使用smelter的文件中。
#![feature(proc_macro, custom_attribute)]
#[macro_use]
extern crate smelter;
然后只需在结构体上方添加 #[derive(Builder)]
,
示例
Smelter | 生成代码 |
|
# [ 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