🧩 Exercícios: Modularização, Crates, Visibilidade (pub) e Workspaces
Spec Sistemas Com Rust • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 11.1 — Declaração de Módulo com mod e Controle de Visibilidade com pub
Contexto: Declaração de Módulo com mod e Controle de Visibilidade com pub no contexto de Modularização, Crates, Visibilidade (pub) e Workspaces.
Requisitos de Execução:
- Criar módulo
redecom submódulohttpe expor funções seletivamente compub.
Resultado Esperado
Módulos organizados com visibilidade encapsulada.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_11_1_SeuNome - Envie na tarefa:
Atividade Cap 11 - Modularização, Crates, Visibilidade (pub) e Workspaces
🔑 Gabarito de Código & Solução Comentada
// modulos.rs
mod rede {
pub mod http {
pub fn get(url: &str) {
println!("GET {}", url);
}
}
}
fn main() {
rede::http::get("https://empresa.com/api");
}
🔍 Nível 2: Prática
Problema 11.2 — Organização em Arquivos Separados (src/rede.rs ou src/rede/mod.rs)
Contexto: Organização em Arquivos Separados (src/rede.rs ou src/rede/mod.rs) no contexto de Modularização, Crates, Visibilidade (pub) e Workspaces.
Requisitos de Execução:
- Estruturar módulos em arquivos distintos e importar no
main.rscommod rede; use rede::*;.
Resultado Esperado
Módulos multi-arquivos vinculados e compilados pelo Cargo.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_11_2_SeuNome - Envie na tarefa:
Atividade Cap 11 - Modularização, Crates, Visibilidade (pub) e Workspaces
🔑 Gabarito de Código & Solução Comentada
// use_imports.rs
mod servicos {
pub fn autenticar() -> bool { true }
}
use servicos::autenticar;
fn main() {
if autenticar() {
println!("Acesso concedido pelo modulo de servicos.");
}
}
⚡ Nível 3: Integração
Problema 11.3 — Visibilidade Restrita por Escopo com pub(crate) e pub(super)
Contexto: Visibilidade Restrita por Escopo com pub(crate) e pub(super) no contexto de Modularização, Crates, Visibilidade (pub) e Workspaces.
Requisitos de Execução:
- Declarar função visível apenas dentro da crate atual usando
pub(crate).
Resultado Esperado
Função interna restrita ao escopo da crate sem exposição pública externa.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_11_3_SeuNome - Envie na tarefa:
Atividade Cap 11 - Modularização, Crates, Visibilidade (pub) e Workspaces
🔑 Gabarito de Código & Solução Comentada
// scoped_visibility.rs
pub(crate) fn rotina_interna() {
println!("Executando rotina interna da crate.");
}
fn main() {
rotina_interna();
}
🏆 Nível 4: Desafio Corporativo
Problema 11.4 — Criação de Biblioteca (lib.rs) com Re-exportação (pub use)
Contexto: Criação de Biblioteca (lib.rs) com Re-exportação (pub use) no contexto de Modularização, Crates, Visibilidade (pub) e Workspaces.
Requisitos de Execução:
- Re-exportar estruturas profundas na raiz da biblioteca facilitando a API pública para consumidores.
Resultado Esperado
API pública limpa criada através de re-exportações `pub use`.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_11_4_SeuNome - Envie na tarefa:
Atividade Cap 11 - Modularização, Crates, Visibilidade (pub) e Workspaces
🔑 Gabarito de Código & Solução Comentada
// lib.rs (Trecho)
mod interno {
pub struct ClienteApi;
}
pub use interno::ClienteApi; // Re-exporta na raiz da crate
fn main() {
let _cli = ClienteApi;
println!("ClienteApi instanciado via re-exportacao!");
}