4 个版本 (破坏性更新)

0.4.1 2024年1月26日
0.4.0 2024年1月26日
0.3.0 2024年1月18日
0.2.0 2024年1月4日
0.0.1 2023年12月26日

#264过程宏

每月 26 次下载
用于 6 个Crate(通过 cowstr

MIT/Apache

49KB
792

代码产品

该crate提供以下两项内容

  1. A 通过扩展产品语法生成代码。这是该crate的主要目标,因为它使得从其他proc macros以方便的方式生成代码成为可能。
  2. 独立的 product!{}product_items!{} 宏,使用库生成代码,这些宏本身也很有用。

产品扩展

名称 product 是因为它会扩展为所有定义集的乘积。例如,给出了两个定义集 'Foo and Bar' 和 'This and That',显示了不同的语法变体

# use code_product::product;
# trait Trait<T>{}
# struct This<T>(T); struct That<T>(T);
# struct Foo; struct Bar;
product!{
    // Rather elaborate form with named definitions:
    // define `Type` to expand to `This` and `That`
    $(Type: (This) (That))
    // and inline define `T` to expand to `Foo` and `Bar`
    impl Trait<$($T: (Foo)(Bar))> for $Type<$T> {}
}

# use code_product::product;
# trait Trait<T>{}
# struct This<T>(T); struct That<T>(T);
# struct Foo; struct Bar;
product!{
    // Alternative form inlining definition and reference by index:
    impl Trait<$((Foo)(Bar))> for $((This)(That))<$0> {}
}

以上两种情况都会扩展四次到

# trait Trait<T>{}
# struct This<T>(T); struct That<T>(T);
# struct Foo; struct Bar;
impl Trait<Foo> for This<Foo> {}
impl Trait<Foo> for That<Foo> {}
impl Trait<Bar> for This<Bar> {}
impl Trait<Bar> for That<Bar> {}

产品语法

产品定义的详细语法描述在: 产品语法

依赖项

~58KB