我如何保持一个mod私有并在Rust中同一个项目的另一个模块中使用它?

lndjwyie  于 2023-01-02  发布在  其他
关注(0)|答案(1)|浏览(118)

所以我想在lib.rs中定义一些模块,但不将它们公开,而只在项目中使用。
在我的lib.rs中,如果我有这样的定义:

pub mod args;

在我的main.rs中,我可以这样使用args模块:

use my_lib::args::Cli;

其中my_libCargo.tml中定义为

[lib]
name = "my_lib"
path = "src/lib.rs"

但我不想要pub mod args;。我尝试更改为pub(crate) mod args;,但这导致无法找到args模块的编译错误。
如何使lib.rs中定义的args这样的模块可用,而不必给予它最宽松的可见性?

dw1jzc5e

dw1jzc5e1#

由于Rust将库lib.rs和二进制main.rs分离到单独的板条箱中,因此没有简单的方法来从main.rs中包含lib.rs中的内容,而不是pub中的内容。
我建议你按照大箱子的方式(我想到了serde),添加一个pub mod __private;来表达这个意思。你可以另外用#[doc(hidden)]注解它,把它从文档中隐藏起来,使它更加明显。

相关问题