将struct移动到单独的文件中而不拆分成单独的模块?

J V*_*J V 8 module rust

说我有这个文件层次结构:

main.rs
protocol/
protocol/mod.rs
protocol/struct.rs
Run Code Online (Sandbox Code Playgroud)

struct.rs:

pub struct Struct {
    members: i8
}

impl Struct {
    pub fn new() -> Struct {
        Struct { 4 }
    }
}
Run Code Online (Sandbox Code Playgroud)

我如何访问它:

mod protocol;
protocol::Struct::new();
// As opposed to:
// protocol::struct::Struct::new();
Run Code Online (Sandbox Code Playgroud)

我已经试过的各种组合pub usemod,但无可否认我的东西盲目乱抓.

是否有可能将结构(和它impl)拆分成一个单独的文件,而不必创建一个新的mod?

She*_*ter 13

简短的回答:用pub use Type在你的mod.rs.完整的例子如下:

我的结构:

src/
??? main.rs
??? protocol
?   ??? thing.rs
??? protocol.rs
Run Code Online (Sandbox Code Playgroud)

main.rs

mod protocol;

fn main() {
    let a = protocol::Thing::new();
    println!("Hello, {:?}", a);
}
Run Code Online (Sandbox Code Playgroud)

协议/ mod.rs

pub use self::thing::Thing;
mod thing;
Run Code Online (Sandbox Code Playgroud)

协议/ thing.rs

#[derive(Debug)]
pub struct Thing(i8);

impl Thing {
    pub fn new() -> Thing { Thing(4) }
}
Run Code Online (Sandbox Code Playgroud)

作为管家位,不要将文件调用与语言关键字相同的内容.struct导致编译问题,所以我重命名了.此外,您的结构创建语法不正确,因此我选择了此示例的较短版本^ _ ^.

并回答标题中提出的问题:文件和模块始终匹配,您不能将某些内容放入不同的文件中,也不能将其放在不同的模块中.您可以重新导出该类型,但它看起来不像它.