9 个版本

0.2.0 2019年7月7日
0.1.7 2019年5月22日
0.1.6 2019年4月21日

1106过程宏

MIT 许可证

8KB
102

derive_less

用于模板化项声明的宏。

示例

假设你需要以下代码

#[derive(Debug)]
pub struct Foo(
    #[apple]
    pub i32,
    #[apple]
    pub i32,
);
#[derive(Clone)]
pub enum Bar {
    #[orange]
    X(i32),
    #[orange]
    Y(i32),
}
#[derive(Debug)]
pub struct Baz(
    #[apple]
    pub i32,
    #[apple]
    pub f32,
    #[apple]
    pub i32,
);
#[derive(Clone)]
pub enum Qux {
    #[orange]
    A(i32),
    #[orange]
    B(i32),
    #[orange]
    C(i32),
}

而不是为每个项声明重复输入 #[orange]#[apple]pub,你可以简单地写

use derive_less::derive_less;

derive_less! {
    #[derive(Debug)] pub struct __ { #[apple] pub __:__ }
    #[derive(Clone)] pub enum   __ { #[orange]    __    }

    struct Foo(i32, i32);
    enum Bar {
        X(i32),
        Y(i32),
    }
    struct Baz(i32, f32, i32);
    enum Qux {
        A(i32),
        B(i32),
        C(i32),
    }
}

你还可以混合使用仅适用于某些项/变体/字段的derives,例如

use derive_less::derive_less;

derive_less! {
    #[derive(Debug)] pub struct __ { #[apple] pub __:__  }
    #[derive(Clone)] pub enum   __ { #[orange]    __     }

    struct Foo(i32, i32);
    enum Bar {
        X(#[peanut] i32),
        Y(i32),
    }
    #[derive(PartialEq, PartialOrd)]
    struct Baz(i32, f32, i32);
    enum Qux {
        A(i32),
        B(i32),
        C(i32),
    }
}

依赖项

~2MB
~46K SLoC