#macro-derive #macro #attributes #derive #custom

无需 std macro-attr-2018

该软件包提供了 macro_attr! 宏,该宏允许使用基于宏的自定义属性和推导

15 个版本 (稳定)

3.0.0 2023年7月24日
2.1.2 2022年5月26日
1.1.2 2022年5月6日
1.1.1 2021年7月15日
0.3.3 2020年9月6日

#549 in Rust 模式

Download history 695/week @ 2024-03-14 807/week @ 2024-03-21 832/week @ 2024-03-28 605/week @ 2024-04-04 584/week @ 2024-04-11 643/week @ 2024-04-18 554/week @ 2024-04-25 488/week @ 2024-05-02 464/week @ 2024-05-09 563/week @ 2024-05-16 492/week @ 2024-05-23 696/week @ 2024-05-30 572/week @ 2024-06-06 509/week @ 2024-06-13 524/week @ 2024-06-20 420/week @ 2024-06-27

每月下载量 2,184
用于 16 个软件包 (直接使用10个)

MIT/Apache

13KB
197

maintenance: passively maintained

macro-attr-2018

macro-attr 的现代分支。

该软件包提供了 macro_attr! 宏,该宏允许使用基于宏的自定义推导。

应使用 macro_attr! 宏来包裹整个 单个 项目(例如 enumstruct 等)声明,包括其属性(包括 derive 和其他属性)。所有以 ! 结尾的推导都将假定由宏实现,并相应处理。

use macro_attr_2018::macro_attr;

// Define some traits to be derived.

trait TypeName {
    fn type_name() -> &'static str;
}

trait ReprType {
    type Repr;
}

// Define macros which derive implementations of these macros.

macro_rules! TypeName {
    // We can support any kind of item we want.
    (() $vis:vis enum $name:ident $($tail:tt)+) => { TypeName! { @impl $name } };
    (() $vis:vis struct $name:ident $($tail:tt)+) => { TypeName! { @impl $name } };

    // Inner rule to cut down on repetition.
    (@impl $name:ident) => {
        impl TypeName for $name {
            fn type_name() -> &'static str { stringify!($name) }
        }
    };
}

macro_rules! ReprType {
    // Note that we use a "derivation argument" here for the `$repr` type.
    (($repr:ty) $vis:vis enum $name:ident $($tail:tt)+) => {
        impl ReprType for $name {
            type Repr = $repr;
        }
    };
}

// Derive.

macro_attr! {
    #[derive(TypeName!, ReprType!(u16))]
    #[repr(u16)]
    enum SomeEnum { A, B, C, D }
}

无运行时依赖