#traits #generic #impl #macro #blanket #generate

macro autoimpl-derive

autoimpl宏的过程宏部分。不应直接依赖。

1个不稳定版本

使用旧Rust 2015

0.1.0 2017年4月12日

#5 in #blanket


3 个crate中(通过 autoimpl)使用

Apache-2.0

3KB

DRY泛型特质的blanket实现!

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

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

注意事项

  • 此功能仅适用于具有类型参数的特质
  • 你只能在每个 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