我正在尝试为我的特质实现自定义派生宏,它们实际上起作用了! 但是我有一个小问题。我似乎找不到一种将通用参数包含到特质中的方法。 具体来说,我想做这样的事情:#[derive(MyCustomDerive<'a, B, C>)] 而现在,我正在硬编码泛型参数,像这样:let g...
我有一个自定义结构体,其如下所示:struct MyStruct { first_field: i32, second_field: String, third_field: u16, } 是否有可能通过编程方式获取结构体字段的数量(例如,通过调用 field_coun...
如何将一个字符串(str)转换为 Rust 中的 TokenStream? 我尝试使用 quote! 宏。 let str = "4"; let tokens = quote! { let num = #str; }; // #str is a str not i32 这里的目标是为一...
我正在尝试创建一个proc-macro,以推导并为结构体实现特质,并且我需要确保结构体内的所有字段都实现了Display。 我该如何检查呢? 此外,我该如何检查属性是否也实现了Iterator? (我希望能处理迭代器项是否也实现了display)。 我使用了syn和quote库。我已经成...
我在寻找在过程宏上下文中等效于file!()和module_path!()的功能。 例如,以下内容无法正常工作: file.rs:#[some_attribute] const A: bool = true; macro.rs:#[proc_macro_attribute] pub fn ...
我有一个过程宏需要存储半持久化状态。该状态需要在编译运行中存活,并且应该在运行 cargo clean 命令时被清理。 过去,我使用了 ./target 目录来实现这个目的。然而,这是一个错误的做法,因为我的一些过程宏生成的文件可能会与 rustc 和 cargo 生成的文件发生冲突。同时,...
我正在编写一个过程宏,它运行良好,但我在以符合人体工程学方式报告错误方面遇到了麻烦。使用 panic!“可以”,但不够优雅,也无法将错误消息漂亮地呈现给用户。我知道在解析TokenStream时可以报告好的错误,但我需要在解析后遍历AST时产生错误。宏调用看起来像这样: attr_test!...
我正在使用 syn 解析 Rust 代码。当我使用 field.ty 读取命名字段的类型时,我得到了一个 syn::Type。当我使用 quote!{#ty}.to_string() 进行打印时,我得到了 "Option<String>"。我该如何才能得到仅为 "String"? ...
我遇到了一个涉及宏的编译错误: <mdo macros>:6:19: 6:50 error: cannot move out of captured outer variable in an `FnMut` closure <mdo macros>:6 bind ( ...
现在proc_macros已经稳定,那么如何创建这样一个东西呢? 从我所见,有一种选项是在fn whatsitsname(attrs: TokenStream, code: TokenStream) -> TokenStream上放置#[proc_macro_attribute]注释,...