💻 Exemplos: Capítulo 11: Modularização, Crates, Visibilidade (pub) e Workspaces
💻 Exemplos: Capítulo 11: Modularização, Visibilidade e Workspaces
Especialização em Sistemas com Rust • Demonstrações Práticas Compiláveis
🎯 Objetivo dos Exemplos
Apresentar a arquitetura modular do Rust através do sistema de módulos mod, regras de visibilidade estrita (pub, pub(crate), privado por padrão), reexportação com pub use, e organização em múltiplos crates via Cargo Workspaces.
1. Código Fonte Completo (src/main.rs)
//! Arquitetura Modular, Visibilidade e Encapsulamento em Rust
// 1. Módulo Interno de Criptografia e Segurança
mod seguranca {
// Submódulo privado acessível apenas dentro de 'seguranca'
mod cifras {
pub fn aplicar_xor_mask(dados: &[u8], chave: u8) -> Vec<u8> {
dados.iter().map(|b| b ^ chave).collect()
}
}
// Estrutura pública com campos públicos e privados
pub struct CofreCredencial {
pub identificador: String, // Campo público acessível livremente
chave_hash: Vec<u8>, // Campo privado! Encapsulamento estrito
}
impl CofreCredencial {
// Construtor público obrigatório porque 'chave_hash' é privado
pub fn novo(id: &str, segredo: &[u8]) -> Self {
let hash_protegido = cifras::aplicar_xor_mask(segredo, 0x5A);
Self {
identificador: String::from(id),
chave_hash: hash_protegido,
}
}
// Método visível apenas dentro da crate atual (pub(crate))
pub(crate) fn verificar_integridade(&self) -> bool {
!self.chave_hash.is_empty()
}
// Método de autenticação público
pub fn validar_segredo(&self, tentativa: &[u8]) -> bool {
let tentativa_mascarada = cifras::aplicar_xor_mask(tentativa, 0x5A);
self.chave_hash == tentativa_mascarada
}
}
}
// 2. Módulo de Rede e Telemetria
mod rede {
pub mod telemetria {
pub fn emitir_heartbeat(modulo: &str) {
println!(" [TELEMETRIA] Módulo '{}' ativo e operando em regime nominal.", modulo);
}
}
}
// 3. Importação Limpa com 'use' e caminhos absolutos 'crate::'
use seguranca::CofreCredencial;
use rede::telemetria::emitir_heartbeat;
fn main() {
println!("=== ARQUITETURA MODULAR E CONTROLE DE VISIBILIDADE ===");
// 1. Instanciando estrutura com campos privados via construtor público
let cofre_db = CofreCredencial::novo("DB_PRODUCAO_POSTGRES", b"SenhaUltraSegura#2026");
println!("Cofre criado para: {}", cofre_db.identificador);
// 2. Invocando método com visibilidade restrita a crate (pub(crate))
let integro = cofre_db.verificar_integridade();
println!("Integridade criptográfica do cofre: {}", integro);
// 3. Validando segredo via método público
let tentativa_correta = b"SenhaUltraSegura#2026";
let tentativa_incorreta = b"123456";
println!("Tentativa 1 (correta): {}", cofre_db.validar_segredo(tentativa_correta));
println!("Tentativa 2 (incorreta): {}", cofre_db.validar_segredo(tentativa_incorreta));
// 4. Invocando função de telemetria importada com 'use'
emitir_heartbeat("AuthService");
emitir_heartbeat("DatabasePool");
// 5. Estrutura de Cargo Workspace (Exemplo de Cargo.toml Monorepo)
println!("\nEstrutura Canônica de um Cargo Workspace Corporativo:");
println!(" [workspace]");
println!(" members = [\"core-engine\", \"api-gateway\", \"cli-tool\"]");
println!(" resolver = \"2\"");
}
2. Saída Esperada no Terminal
=== ARQUITETURA MODULAR E CONTROLE DE VISIBILIDADE ===
Cofre criado para: DB_PRODUCAO_POSTGRES
Integridade criptográfica do cofre: true
Tentativa 1 (correta): true
Tentativa 2 (incorreta): false
[TELEMETRIA] Módulo 'AuthService' ativo e operando em regime nominal.
[TELEMETRIA] Módulo 'DatabasePool' ativo e operando em regime nominal.
Estrutura Canônica de um Cargo Workspace Corporativo:
[workspace]
members = ["core-engine", "api-gateway", "cli-tool"]
resolver = "2"