#traits #generic #impl #macro #blanket

autoimpl

autoimpl 宏的用户界面部分。使用 autoimpl 自动实现泛型特质!

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2017年4月12日

#3 in #blanket


2 个crate中使用了(通过 rustiful

Apache-2.0

2KB

泛型特质的DRY(Don't Repeat Yourself)实现!

你有泛型特质吗?你觉得为它添加泛型实现是重复的?那么这个宏就是为你准备的!这是一个基于 proc-macro-hack 的宏,有助于减少一些重复,且与任何 Rust 版本 >= 1.15.0 兼容。

autoimpl! 宏为具有与传入 autoimpl! 块中特质相同边界的所有 T 生成泛型特质的默认泛型实现。

注意事项

  • 这仅适用于具有类型参数的特质
  • 你只能在每个 autoimpl! 块中传入一个特质
  • 目前仅支持单个类型参数
  • 目前,由于 proc-macro-hack 的限制,每个模块中只能有一个 autoimpl! 块。

安装

如果你使用 Cargo,只需将 autoimpl 添加到你的 Cargo.toml

[dependencies]
autoimpl = "0.1"

示例

    #[macro_use] extern crate autoimpl;

    struct Dog {}

    struct Duck {}

    fn main() {
        autoimpl! {
            trait Quack<T> {
                fn say(&self) -> String {
                    "quack".to_string()
                }
            }
        }
        
        let dog = Dog {};
        let duck = Duck {};
        assert_eq!(dog.say(), duck.say());
    }

依赖项

~1.5MB
~41K SLoC