📊 Capítulo 11: Módulos, Crates & Workspaces
Especialização em Sistemas com Rust
🗺️ A Árvore de Módulos e Visibilidade no Rust
flowchart TD
ROOT["Crate Root (main.rs / lib.rs)"]
--> MOD_REDE["pub mod rede; (src/rede.rs ou src/rede/mod.rs)"]
--> SUBMOD["pub mod dns; (src/rede/dns.rs)"]
MOD_REDE --> PRIV["mod criptografia; (Privado / Interno)"]
ROOT --> MOD_DB["pub mod database;"]
style ROOT fill:#ede7f6,stroke:#512da8,stroke-width:2px
style MOD_REDE fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
style SUBMOD fill:#c8e6c9,stroke:#2e7d32,stroke-width:1.5px
style PRIV fill:#ffebee,stroke:#d32f2f,stroke-width:1.5px
style MOD_DB fill:#e1f5fe,stroke:#03a9f4,stroke-width:1.5px
🎯 Slide 1: Regras de Visibilidade Estritas
-
Privacidade por Padrão: Tudo em Rust (funções, structs, atributos) é privado para o módulo pai por padrão.
- Modificadores de Visibilidade:
pub: Acessível globalmente.pub(crate): Acessível em qualquer lugar dentro da mesma crate.pub(super): Acessível apenas para o módulo imediatamente acima.
🎯 Slide 2: Reexportação com pub use
// No lib.rs
mod parser;
mod token;
pub use parser::Parser; // Facilita a vida do usuário da biblioteca!
pub use token::Token;
🎯 Slide 3: Cargo Workspaces para Monorepos
# Cargo.toml na raiz
[workspace]
members = [
"crates/core_engine",
"crates/cli_app",
"crates/api_server",
]
- Compartilha a pasta
target/, dependências comuns e lockfile único, acelerando drasticamente o tempo de build!
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim