fn my_derive_macro(input: TokenStream) -> TokenStream 我们先给之前的结构体简单写一个派生宏吧! 文件名:inner_procs/src/lib.rs use proc_macro::TokenStream; use quote::quote; use syn::{parse_macro_input, DeriveInput, ItemFn}; #[proc_macro_derive(MyDebug)] pub fn my_debug_derive(input...
在Rust中,编写过程宏,必须在Cargo.toml中设置[lib]proc-macro = true,这样就导致该库只能用于编写过程宏代码,无法在其他库中编写proc-macro代码,比如在其他包中无法使用use proc_macro::TokenStream;,这样就很难对宏代码进行单元测试。 所以第三方提供了proc-macro2这样的包,可以在任何库类型中编写过程宏代码逻辑,...
在Rust中,编写过程宏,必须在Cargo.toml中设置[lib]proc-macro = true,这样就导致该库只能用于编写过程宏代码,无法在其他库中编写proc-macro代码,比如在其他包中无法使用use proc_macro::TokenStream;,这样就很难对宏代码进行单元测试。 所以第三方提供了proc-macro2这样的包,可以在任何库类型中编写过程宏代码逻辑,...
proc-macro-error:提供过程宏中错误报告的辅助工具,使错误处理更加友好和易于定位问题。 strum:提供一系列宏,用于枚举类型与字符串之间的转换以及其他枚举相关的工具。 proc-macro-crate:帮助过程宏定位本身所在的crate,解决宏内部引用宏定义所在的crate时的路径问题。 proc-macro2:代替编译器内建的proc_macro库,提供更...
首先,过程宏库的Cargo.toml文件需要标明这是一个proc macro库,并且一般来说,会使用到如下三个库的依赖: [package]name="tool-derive"version="0.1.0"authors= ["piaoliu <[email protected]>"][lib]name="tool_derive"proc-macro=true[dependencies]proc-macro2="^0.4.6"quote="^0.6.3"syn="^0.14.2" ...
在Rust源代码中,rust/library/proc_macro/src/bridge/selfless_reify.rs文件的作用是实现了与proc_macro自定义属性之间的通信桥梁。 Rust是一种静态强类型系统的编程语言,它提供了一种叫做"过程宏"(proc_macro)的功能,使开发者能够在编译时处理Rust代码的语法结构。proc_macro可以用于编写自定义属性、函数和类型,从...
对于宏编程,Rust中提供了几种过程宏的库操作支持,即: 1、Syn 它是基于TokenStream的一种语法分析过程,它并不很强大,需要自定义扩展一些宏,比如Rust中的函数和闭包等。 2、Quote 应用比较简单,适合使用。 3、proc_macro2 更好的proc_macro更方便的接口,能和syn、quote一起更好的配合应用。
#![feature(proc_macro_hygiene, decl_macro)]属性为Rocket框架启用了Rust实验特性。#[macro_use]属性从Rocket模块导入宏。下面是一个处理程序函数,接到请求时提供HTML:复制 #[get("/")]fn hello_world() -> content::Html<&'static str> { content::Html("Hello, world!")}1.2.3.4.5.6.7.he...
2 (*)└── tracing-attributes v0.1.24 (proc-macro) └── tracing v0.1.38 ├── druid v0.8.3 (*) └── druid-shell v0.8.3 └── druid v0.8.3 (*)通过 cargo tree -d 发现 syn 有依赖两个版本,syn v1.0.109 和 syn v2.0.15。发现冲突原因 查找依赖 syn...
3、proc_macro2 更好的proc_macro更方便的接口,能和syn、quote一起更好的配合应用。 什么是过程宏? 过程宏(Procedure Macro)是Rust中的一种特殊形式的宏,它将提供比普通宏更强大的功能。方便起见,本文将Rust中由macro_rules!定义的宏称为规则宏以示区分。