Ієрархія файлової системи

Пропущення вмісту модуля призведе до того, що Rust шукатиме його в іншому файлі:

mod garden;

Це повідомляє Rust, що вміст модуля garden знаходиться в src/garden.rs. Так само модуль garden::vegetables можна знайти на src/garden/vegetables.rs.

Корінь crate знаходиться в:

  • src/lib.rs (для крейта бібліотеки)
  • src/main.rs (для крейта виконуваного файлу)

Модулі, визначені у файлах, також можна документувати за допомогою "внутрішніх коментарів документа". Вони документують елемент, який їх містить – у цьому випадку це модуль.

//! Цей модуль реалізує сад, включаючи високоефективну реалізацію
//! пророщування.

// Ре-експорт типів з цього модуля.
pub use garden::Garden;
pub use seeds::SeedPacket;

/// Посіяти задані пакети насіння.
pub fn sow(seeds: Vec<SeedPacket>) {
    todo!()
}

/// Збір врожаю в саду, який вже готовий.
pub fn harvest(garden: &mut Garden) {
    todo!()
}
This slide should take about 5 minutes.
  • До Rust 2018 модулі мали розташовуватися в module/mod.rs замість module.rs, і це все ще робоча альтернатива для випусків після 2018 року.

  • Основною причиною введення filename.rs як альтернативи filename/mod.rs було те, що багато файлів з назвами mod.rs важко розрізнити в IDE.

  • Більш глибоке вкладення може використовувати папки, навіть якщо основним модулем є файл:

    src/
    ├── main.rs
    ├── top_module.rs
    └── top_module/
        └── sub_module.rs
    
  • Місце, де Rust шукатиме модулі, можна змінити за допомогою директиви компілятора:

    #[path = "some/path.rs"]
    mod some_module;

    Це корисно, наприклад, якщо ви хочете розмістити тести для модуля у файлі з іменем some_module_test.rs, подібно до конвенції у Go.