rust 使用`src/bin`中的私有模块

1wnzp6jl  于 2023-04-30  发布在  其他
关注(0)|答案(1)|浏览(185)

我在Rust中有一个crate foo_core,并试图在foo_core/src/bin中的一个二进制文件中使用一个函数:

// foo_core/src/bin/run-foo.rs
use crate::run_foo;

fn main() {
  run_foo();
}
// foo_core/src/lib.rs

fn run_foo() {}

遗憾的是,这并不符合

error[E0433]: failed to resolve: could not find `run_foo` in the crate root

更改为pub fn run_foo()use foo_core::run_foo是一个不合适的选择,因为我仍然很高兴只能在run-foo.rs中使用run_foo,而不会在库接口中公开它。我能做到这一点吗?

umuewwlo

umuewwlo1#

我能做到这一点吗?
不可以。其他板条箱,即使在同一个包中,也只能使用库的公共API。
然而,将项目公开但隐藏是很常见的:

#[doc(hidden)]
pub fn run_foo() {}

这样,它在技术上是公开的,但不会显示在文档中。你也可以把它放在一个mod unstable_internals_please_do_not_use_this,如果你想让它很明显,它不被使用。(有些人可能会,但你至少传达了“如果它坏了不是我的错”。)
你也可以使用条件编译将它 * 有条件地 * 公开,但这意味着你必须使用cargo build run-foo --features run_foo_is_public,这是一个痛苦,库用户仍然可以决定为自己启用该功能。

相关问题