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!() }
-
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.