DeriveProceduralMacroAttribute:表示从衍生宏的属性中解析配置。 ProcMacroDeriveAttribute:表示从过程宏的派生属性中解析配置。 Default:表示使用默认配置。 MacroConfigType:该enum定义了Rustfmt针对过程宏的派生属性的配置类型。每个选项表示了Rustfmt针对过程宏的不同配置。主要的选项包括以下几种: AttrProcMacro:表示从属...
和属性宏不同的是,派生宏的展开产物不会完全替代原来的属性,而是添加(append)到derive属性里,因为derive里可以同时使用多个,比如derive(Debug, Eq, Clone)等。 调用格式如下: useproc_macro::TokenStream;// declare#[proc_macro_derive(TlbormDerive)]pubfntlborm_derive(item:TokenStream)->TokenStream{TokenStream...
use proc_macro;#[proc_macro_derive(YourTrait,attributes(attr1,attr2))]pub fnyour_trait_derive_macro(input:proc_macro::TokenStream)->proc_macro::TokenStream{letoutput=input.to_string();// 解析属性参数letattr1=ifoutput.contains("attr1"){"impl YourTrait for YourType {\n // 根据attr1生成...
useproc_macro;#[proc_macro_derive(YourTrait, attributes(attr1, attr2))]pubfnyour_trait_derive_macro(input: proc_macro::TokenStream)->proc_macro::TokenStream {letoutput= input.to_string();// 解析属性参数letattr1=ifoutput.contains("attr1") {"impl YourTrait for YourType {\n // 根据attr...
procedural macros 只能在proc-macro类型的 crate 内定义,所以需要修改 Cargo.toml: [lib]proc-macro=true 删除src/lib.rs里的全部内容,然后定义第一个过程宏(procedural macro): useproc_macro::TokenStream;#[proc_macro]pubfnhello_proc(input: TokenStream)->TokenStream { ...
#[proc_macro_derive(YourTrait, attributes(attr1, attr2))] pub fn your_trait_derive_macro(input: proc_macro::TokenStream) -> proc_macro::TokenStream { let output = input.to_string(); // 解析属性参数 let attr1 = if output.contains("attr1") { ...
proc-macro=true proc_macro是Rust编译器提供的编写过程宏所需的类型和工具,过程宏有以下三种表示形式: derive式 函数带有#[proc_macro_derive(Name)]属性或者#[proc_macro_derive(Name, attributes(attr))]属性 函数签名为pub fn xxxx (proc_macro::TokenStream) -> proc_macro::TokenStream ...
然后是作为derive macro的一部分的attribute macro,大家多少都用过,我也就不多说了,这里直接写一下例子 #[proc_macro_derive(HelloWithAttributes, attributes(world))]pubfnderive_hello_with_attributes(_:TokenStream)->TokenStream{TokenStream::new()}
Macro attributes - 宏属性 Derive macro helper attributes - 派生宏辅助属性 Tool attributes - 工具属性 Built-in attributes - 内建属性 Macro Attributes 宏属性 宏属性,也叫属性宏。属于过程宏的一种。 定义过程宏的时候,使用#[proc_macro_attribute],加一个固定签名的函数(详见过程宏一章)。
hello-world-derive = { path = "hello-world-derive" } 这里是一个hello-world-derivecrate 源码的例子: extern crate proc_macro; extern crate syn; #[macro_use] extern crate quote; use proc_macro::TokenStream; #[proc_macro_derive(HelloWorld)] ...