4个版本
0.2.0 | 2022年10月30日 |
---|---|
0.1.2 | 2022年5月20日 |
0.1.1 | 2022年5月20日 |
0.1.0 | 2022年5月20日 |
4 在 #bake
每月29 次下载
用于 rotz
17KB
421 行
面包师
面包师提供了一个过程宏,用于从中间结构创建最终(烘焙)结构。
假设你有一个从参数或配置文件解析的结构体,你需要在这之前处理这些数据到相似的结构体。
struct Cli {
pub urls: Vec<String>,
pub add_slash_to_end: bool
}
struct CliBaked {
pub urls: Vec<String>,
}
impl Cli {
pub fn bake(self) -> CliBaked {
CliBaked {
urls: self.urls.into_iter().map(|u| if self.add_slash_to_end && !u.ends_with('/') { u + "/" } else { u }).collect::<Vec<_>>()
}
}
}
使用面包师可以实现同样的效果。
use baker::Bake;
#[derive(Bake)]
#[baked(name = "CliBaked")]
struct Cli {
#[baked(map_fn(bake = "|cli| cli.urls.iter().map(|u| if cli.add_slash_to_end && !u.ends_with('/') { u.to_string() + \"/\" } else { u.to_string() }).collect::<Vec<_>>()"))]
pub urls: Vec<String>,
#[baked(ignore)]
pub add_slash_to_end: bool,
}
依赖
~2MB
~43K SLoC