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.