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:

  1. Criar módulo rede com submódulo http e expor funções seletivamente com pub.

Resultado Esperado

Módulos organizados com visibilidade encapsulada.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_11_1_SeuNome
  2. 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:

  1. Estruturar módulos em arquivos distintos e importar no main.rs com mod rede; use rede::*;.

Resultado Esperado

Módulos multi-arquivos vinculados e compilados pelo Cargo.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_11_2_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_11_3_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_11_4_SeuNome
  2. 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!");
}