我正在编写一个库,其中包含具有自定义属性的自定义派生宏。为此,我使用darling
. 因此,我的项目结构如下:
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pg-worm\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pg-worm-derive\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src/lib.rs\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src/lib.rs\n
Run Code Online (Sandbox Code Playgroud)\n我的 proc 宏是这样指定的 ( pg-worm/pg-worm-derive/src/lib.rs
):
use darling::FromDeriveInput;\nuse proc_macro::{self, TokenStream};\nuse syn::parse_macro_input;\n\n#[derive(FromDeriveInput)]\n#[darling(attributes(table))]\nModelInput {\n table_name: Option<String>\n}\n\n#[proc_macro_derive(Model)]\npub fn derive(input: TokenStream) -> TokenStream {\n let opts = ModelInput::from_derive_input(&parse_macro_input!(input)).unwrap();\n\n // macro magic happens\n}\n
Run Code Online (Sandbox Code Playgroud)\n然后我从主文件 ( pg-worm/src/lib.rs
) 中重新导出宏:
pub use pg_worm_derive::*;\n\npub trait Model {\n // trait specs\n}\n
Run Code Online (Sandbox Code Playgroud)\n但是当我使用以下代码测试我的宏时(也在pg-worm/src/lib.rs
):
#[cfg(test)]\nmod tests {\n use pg_worm::Model;\n\n #[derive(Model)]\n #[table(table_name = "person")]\n struct Person {\n id: i64,\n name: …
Run Code Online (Sandbox Code Playgroud)