Rust 有没有办法在proc宏板条箱中具有公共特性?
我有一个proc宏板条箱,其中包含一个宏,当扩展时,需要对内置类型使用自定义trait实现。我试图在同一个板条箱中定义特性,但Rust告诉我,一个proc宏板条箱只能有公共宏(用Rust 有没有办法在proc宏板条箱中具有公共特性?,rust,traits,rust-crates,rust-proc-macros,Rust,Traits,Rust Crates,Rust Proc Macros,我有一个proc宏板条箱,其中包含一个宏,当扩展时,需要对内置类型使用自定义trait实现。我试图在同一个板条箱中定义特性,但Rust告诉我,一个proc宏板条箱只能有公共宏(用.[proc#u macro]注释的函数),其他任何东西都不能是公共的。所以我把这个特性放在另一个板条箱中,在proc宏板条箱中作为依赖项包含它。但这意味着任何想要使用我的proc宏板条箱的人也必须依赖于另一个trait板条箱 因此,我想知道是否有办法将公共特征添加到proc宏板条箱中,或者以某种方式将proc宏和特征板
.[proc#u macro]
注释的函数),其他任何东西都不能是公共的。所以我把这个特性放在另一个板条箱中,在proc宏板条箱中作为依赖项包含它。但这意味着任何想要使用我的proc宏板条箱的人也必须依赖于另一个trait板条箱
因此,我想知道是否有办法将公共特征添加到proc宏板条箱中,或者以某种方式将proc宏和特征板条箱链接起来,以便最终用户无法尝试使用其中一个而不使用另一个?如果两者都不可能,唯一的解决方案就是记录依赖关系,这种依赖关系有点脆弱。通常的处理方法是让用户根本不依赖于您的proc宏板条箱 您的问题可以用3个板条箱解决:
- 包含proc宏使用的类型和特征定义的“内部”板条箱
- 过程宏板条箱:
- 取决于内部板条箱,因此可以使用其类型和特性
- “公共”板条箱:
- 取决于内部和proc宏机箱
- 重新导出希望用户使用的所有类型、特征和宏
这种模式在野外的一些流行示例:
- 取决于包含实际宏的
此错误impl
- 取决于同样包含宏的
pin项目内部
- 取决于
和达林核心
,而达林宏本身也取决于达林宏
达林核心