Hierarquia do Sistema de Arquivos

Omitir o conteúdo do módulo dirá ao Rust para procurá-lo em outro arquivo:

mod garden;

Isto diz ao Rust que o conteúdo do módulo garden é encontrado em src/garden.rs. Da mesma forma, um módulo garden::vegetables pode ser encontrado em src/garden/vegetables.rs.

A raiz do crate está em:

  • src/lib.rs (para um crate de biblioteca)
  • src/main.rs (para um crate binário)

Módulos definidos em arquivos também podem ser documentados usando “comentários internos de documento” (inner doc comments). Estes documentam o item que os contém - neste caso, um módulo.

//! Este módulo implementa o jardim (_garden_), incluindo uma implementação de germinação
//!  de alto desempenho.

// Re-exporta tipos deste módulo.
pub use garden::Garden;
pub use seeds::SeedPacket;

/// Semeia os pacotes de semente fornecidos.
pub fn sow(seeds: Vec<SeedPacket>) {
    todo!()
}

/// Colhe os vegetais no jardim que está pronto.
pub fn harvest(garden: &mut Garden) {
    todo!()
}
This slide should take about 5 minutes.
  • Antes do Rust 2018, os módulos precisavam estar localizados em module/mod.rs ao invés de module.rs, e esta ainda é uma alternativa funcional para edições posteriores a 2018.

  • A principal razão para introduzir nome_de_arquivo.rs como alternativa a nome_de_arquivo/mod.rs foi porque muitos arquivos denominados mod.rs podem ser difíceis de distinguir em IDEs.

  • O aninhamento mais profundo pode usar pastas, mesmo que o módulo principal seja um arquivo:

    src/
    ├── main.rs
    ├── top_module.rs
    └── top_module/
        └── sub_module.rs
    
  • O local no qual o Rust irá procurar por módulos pode ser alterado por meio de uma diretiva de compilador:

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

    Isto é útil, por exemplo, se você quiser colocar testes para um módulo em um arquivo chamado algum_modulo_teste.rs, semelhante à convenção em Go.