파일시스템 계층
모듈의 내용을 기술하지 않으면, 러스트는 다른 파일에서 그 내용을 읽습니다:
mod garden;
위 코드는 러스트로 하여금 garden
모듈의 내용을 src/garden.rs
에서 찾도록 합니다. 비슷하게, garden::vegetables
모듈은 src/garden/vegetables.rs
에서 찾습니다.
crate(크레이트)
의 루트는 아래 경로 입니다:
src/lib.rs
(라이브러리 크레이트)src/main.rs
(바이너리 크레이트)
모듈도 “내부 문서 주석“을 사용하여 문서화할 수 있습니다. 이러한 모듈은 모듈이 포함된 항목(이 경우에는 모듈)을 문서화합니다.
//! This module implements the garden, including a highly performant germination //! implementation. // Re-export types from this module. pub use seeds::SeedPacket; pub use garden::Garden; /// Sow the given seed packets. pub fn sow(seeds: Vec<SeedPacket>) { todo!() } /// Harvest the produce in the garden that is ready. pub fn harvest(garden: &mut Garden) { todo!() }
-
module/mod.rs
를module.rs
로 바꾼다 하더라도 Rust 2018에서는 하위 모듈을 사용할 수 있습니다. -
filename.rs
를filename/mod.rs
대신 사용할 수 있도록 하는 주된 이유는,mod.rs
라는 이름을 가진 파일이 많을 경우 IDE에서 이들을 서로 구별하는게 힘들기 때문입니다. -
폴더를 이용해서 더 깊은 계층 구조를 구현할 수 있습니다. 심지어는 메인 모듈이 파일이더라도요:
src/ ├── main.rs ├── top_module.rs └── top_module/ └── sub_module.rs
-
러스트가 어디서 모듈들을 찾을지는 컴파일러 디렉티브로 변경 가능합니다:
#[path = "some/path.rs"] mod some_module;
이는 Go언어 에서처럼 어떤 모듈의 테스트를
some_module_test.rs
같은 파일에 두고 싶은 경우에 유용합니다.