我在
src
目录下有三个文件:
src
|____ keys.rs // a 'sub-module' under `lib.rs`
|____ lib.rs
|____ main.rs // binary file
在我的
cargo.toml
中,我专门指定了lib
和bin
的路径,即:
[lib]
name = "lib"
path = "src/lib.rs"
[[bin]]
name = "urs" // name of my binary
path = "src/main.rs"
在
keys.rs
中,我定义了几个结构体和函数。
在
lib.rs
中,我声明mod keys;
,即:
pub(crate) mod keys;
use [...]
在
main.rs
中,我想使用keys
中的模块lib
,所以我这样做:
use lib::keys;
use [...]
我想公开模块
keys
以在板条箱内的任何位置使用,但不允许在板条箱之外使用它,因此,我在 pub(crate)
中声明 pub(crate) mod keys;
时使用可见性修饰符 lib.rs
。
然而,货物告诉我这一点:
error[E0603]: module `keys` is private
--> src/main.rs:5:10
|
5 | use lib::keys;
| ^^^^ private module
|
note: the module `keys` is defined here
--> F:\rust_projects\sui-utils-rust\src/lib.rs:1:1
|
1 | pub(crate) mod keys;
| ^^^^^^^^^^^^^^^^^^^
我的问题:
是否有可能实现我想要实现的目标? IE。通过声明
pub mod keys;
,我将允许外部板条箱使用 keys
模块中的内容,如何在保留对 keys
模块的板条箱独占访问的同时防止这种情况?
您只需更改项目结构即可做到这一点,如下所示:
src/keys.rs
// Your structs and functions
src/lib.rs
mod keys;
// Rest of your library code
src/main.rs
mod keys;
// Rest of your binary code
fn main() {
// You can use items from keys here
}
这使得密钥模块成为同一包内的二进制文件和库之间的共享模块。这样,它就不会暴露给外部板条箱,但您的二进制文件和库都可以使用它。