Hierarquia do Sistema de Arquivos
Omitir o conteúdo do módulo dirá ao Rust para procurá-lo em outro arquivo:
mod garden;
Isso diz ao Rust que o conteúdo do módulo jardim
pode ser encontrado em src/jardim.rs
. Similarmente, um módulo jardim::vegetais
pode ser encontrado em src/jardim/vegetais.rs
.
A raiz 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, incluindo uma implementação de germinação //! de alto desempenho. // Re-exporta tipos deste módulo. pub use seeds::SeedPacket; pub use garden::Garden; /// 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!() }
-
Antes do Rust 2018, os módulos precisavam estar localizados em
module/mod.rs
ao invés demodule.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 anome_de_arquivo/mod.rs
foi porque muitos arquivos denominadosmod.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.