#macro-derive #macro #derive #syntax

已删除 desugar-impl

为结构体、枚举和联合声明中的更不明确的泛型提供糖语法

0.1.1 2021年7月29日
0.1.0 2021年7月29日

#186 in #macros

ISC OR MIT OR Apache-2.0

8KB
90

impl Trait 不允许在函数和方法返回类型之外使用

… 但现在允许了!

此库为你提供了一个宏,仅此一个: #[desugar_impl]

使用 #[desugar_impl] 注释任何结构体、枚举或联合,以允许在它们的声明中使用 field_name: impl SomeTrait。例如:

#[desugar_impl]
struct Test {
    a: impl Clone + PartialOrd,
    b: impl Clone + PartialOrd,
    c: impl Hash,
}

转换为

struct Test<Ty1, Ty2, Ty3>
where
    Ty1: Clone + PartialOrd,
    Ty2: Clone + PartialOrd,
    Ty3: Hash,
{
    a: Ty1,
    b: Ty2,
    c: Ty3,
}

您仍然可以在 #[desugar_impl] 下方放置任何 #[derive()] 宏,并且它们将与转换后的代码一起正常工作。


lib.rs:

impl Trait 不允许在函数和方法返回类型之外使用

… 但现在允许了!

此库为你提供了一个宏,仅此一个: [#[desugar_impl]][macro@desugar_impl]。

使用 [#[desugar_impl]][macro@desugar_impl] 注释任何结构体、枚举或联合,以允许在它们的声明中使用 field_name: impl SomeTrait。例如:

#[desugar_impl::desugar_impl]
struct Test {
    a: impl Clone + PartialOrd,
    b: impl Clone + PartialOrd,
    c: impl Copy,
}

转换为

struct Test<Ty1, Ty2, Ty3>
where
    Ty1: Clone + PartialOrd,
    Ty2: Clone + PartialOrd,
    Ty3: Copy,
{
    a: Ty1,
    b: Ty2,
    c: Ty3,
}

您仍然可以在 #[desugar_impl] 下方放置任何 #[derive()] 宏,并且它们将与转换后的代码一起正常工作。

依赖项

~1.5MB
~35K SLoC