我有一个带有宏的proc宏板条箱,该宏在展开时需要为Rust内置类型使用自定义特征实现。我试图在同一条板条箱中定义特征,但是Rust告诉我proc-macro条板箱只能有公共宏(带有标记的函数#[proc_macro]
),其他任何东西都不能是公共的。因此,我将特征放入另一个板条箱中,并将它作为依赖宏放入proc-macro板条箱中。但是,这意味着任何想要使用我的proc宏板条箱的人也必须依赖于其他特征板条箱。
所以我想如果有是一个公共特性添加到PROC宏箱,或以其他方式进行以某种方式连接,以便最终用户无法尝试使用一个没有其他的PROC宏和特质箱子的方法吗?如果不可能,唯一的解决方案就是记录依赖关系,这是很脆弱的。
通常处理此问题的方法是完全不依赖用户。
您的问题可以用3个板条箱解决:
每当您的宏在其生成的代码中提及共享类型时,就需要使用完全限定的名称,以便用户也无需导入它们。
这种模式在野外流行的一些例子:
thiserror
取决于thiserror-impl
哪个包含实际的宏pin-project
取决于pin-project-internal
哪个再次包含宏darling
取决于darling-core
和darling-macro
,其本身也取决于darling-core
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句