#fields #struct-fields #field #macro-derive #macro

macro make_fields

受lens库的makeFields启发的,用于处理字段的轻量级 derive 宏。

1 个不稳定版本

0.1.0 2023年4月30日

#1876过程宏

MIT 许可证

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