我正在编写一个
proc-macro
,它接收一个特征项并返回一些基于该特征的模块。
输入
#[my_macro]
pub trait MyTrait {
// ...
// ... fn items
// ...
}
输出
pub mod my_mod_a {
//...
}
pub mod my_mod_b {
//...
}
// etc...
问题是,我有一个项目(结构体或枚举)定义在宏项目的外部,我想从生成的代码中引用它。
回到例子:
定义这样的东西,一个应用宏的特征项,以及可以在项目中任何范围的外部项,例如
crate::error::Error
// src/lib.rs
// enum for error handling defined by user what i want to refer from generated code
pub enum MyOuterEnum {
GoodError,
BadError,
}
#[my_macro]
pub trait MyTrait {
// some function that return type would be transform into a result
fn my_fn() -> u32;
}
How can I pass this element to the macro and thus refer to it?
举个例子,假设我想将函数
my_fn
的输出从 T
转换为 Result<T>
,那么我应该得到如下输出:
// possible output referencing the element outside the macro input item
pub mod my_generated_mod {
pub trait MyTrait {
// my function with return type changed
fn my_fn() -> Result<u32, crate::MyOuterEnum>;
}
}
您可以在路径中使用
super
来引用父模块。
我并不是 100% 清楚你想在子模块中使用哪些项目,但你要么想要:
super::MyOuterEnum
,或use super::*;
- 将父级的所有内容包含到子级中