1 个不稳定版本
0.1.0 | 2023年4月30日 |
---|
#1876 在 过程宏
6KB
112 行
make_fields
受lens库中的makeFields
启发的,用于处理字段的轻量级 derive 宏。
Rust缺乏高阶类型,这阻止了我们做一些酷的事情,比如无标记的最终标签、自由单子或单子变换。
我发现,在没有这些工具的情况下,使用特质或类型类来描述函数所需的泛型信息有时就足够了。
因此,有了这个crate。
示例
use make_fields::HasFields;
// This will create immutable accessors for all fields, plus a trait
// indicating that some T "Has" that field.
#[derive(HasFields)]
struct AppConfig {
db: HashMap<String, String>,
port: u16,
host: String,
}
// Now we can write our function generically like this, which makes it
// easier to write test using a mock object or something.
fn connect_to_server<T>(cfg: &T)
where
T: HasPort<Port = u16> + HasHost<Host = String>,
{
// ...
}
贡献
如果你认为可以使make_fields
变得更好,请随时打开一个问题或PR!
许可证
MIT
依赖项
~1–1.6MB
~32K SLoC