Spec Sistemas Com Rust • Trilha Progressiva em 4 Níveis


🧭 Navegação Pedagógica


🎯 Nível 1: Fundamentos

Problema 16.1 — Hierarquia de Erros Customizados com enum e std::error::Error

Contexto: Hierarquia de Erros Customizados com enum e std::error::Error no contexto de Tratamento Idiomático de Erros, Anyhow e Thiserror.

Requisitos de Execução:

  1. Implementar Display e Error manualmente para enum de erros de banco de dados.

Resultado Esperado

Tipo de erro de domínio com formatação legível implementado.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_16_1_SeuNome
  2. Envie na tarefa: Atividade Cap 16 - Tratamento Idiomático de Erros, Anyhow e Thiserror
🔑 Gabarito de Código & Solução Comentada
// custom_error.rs
use std::fmt;

#[derive(Debug)]
enum BancoErro { ConexaoPerdida, RegistroInexistente }

impl fmt::Display for BancoErro {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "{:?}", self)
    }
}
impl std::error::Error for BancoErro {}

fn main() {
    let err: Result<(), BancoErro> = Err(BancoErro::ConexaoPerdida);
    println!("Erro capturado: {:?}", err);
}

🔍 Nível 2: Prática

Problema 16.2 — Erros Estruturados Declarativos com a Crate thiserror

Contexto: Erros Estruturados Declarativos com a Crate thiserror no contexto de Tratamento Idiomático de Erros, Anyhow e Thiserror.

Requisitos de Execução:

  1. Utilizar macros #[derive(thiserror::Error)] e #[error('Falha: {0}')].

Resultado Esperado

Erros corporativos estruturados com código boilerplate reduzido a zero.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_16_2_SeuNome
  2. Envie na tarefa: Atividade Cap 16 - Tratamento Idiomático de Erros, Anyhow e Thiserror
🔑 Gabarito de Código & Solução Comentada
// thiserror_demo.rs
use thiserror::Error;

#[derive(Error, Debug)]
pub enum ServicoErro {
    #[error("ID invalido: {0}")]
    IdInvalido(u64),
    #[error("Timeout de conexao apos {0}s")]
    Timeout(u32),
}

fn main() {
    let e = ServicoErro::IdInvalido(999);
    println!("Mensagem formatada: {}", e);
}

⚡ Nível 3: Integração

Problema 16.3 — Manipulação Genérica em Aplicações com anyhow::Result e Context

Contexto: Manipulação Genérica em Aplicações com anyhow::Result e Context no contexto de Tratamento Idiomático de Erros, Anyhow e Thiserror.

Requisitos de Execução:

  1. Utilizar anyhow::Context para anexar mensagens explicativas contextuais a erros que sobem na pilha.

Resultado Esperado

Contexto detalhado anexado ao rastreamento de erro.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_16_3_SeuNome
  2. Envie na tarefa: Atividade Cap 16 - Tratamento Idiomático de Erros, Anyhow e Thiserror
🔑 Gabarito de Código & Solução Comentada
// anyhow_demo.rs
use anyhow::{Context, Result};

fn ler_arquivo_critico() -> Result<String> {
    std::fs::read_to_string("config_inexistente.json")
        .context("Falha critica ao tentar carregar configuracoes")
}

fn main() {
    if let Err(e) = ler_arquivo_critico() {
        println!("Erro com contexto: {:?}", e);
    }
}

🏆 Nível 4: Desafio Corporativo

Problema 16.4 — Conversão Automática de Erros com From e Into

Contexto: Conversão Automática de Erros com From e Into no contexto de Tratamento Idiomático de Erros, Anyhow e Thiserror.

Requisitos de Execução:

  1. Implementar From<std::io::Error> for ServicoErro para propagação transparente com ?.

Resultado Esperado

Erros de I/O convertidos automaticamente para o tipo de erro corporativo.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_16_4_SeuNome
  2. Envie na tarefa: Atividade Cap 16 - Tratamento Idiomático de Erros, Anyhow e Thiserror
🔑 Gabarito de Código & Solução Comentada
// from_error.rs
struct AppError(String);
impl From<std::io::Error> for AppError {
    fn from(e: std::io::Error) -> Self { AppError(e.to_string()) }
}

fn main() {
    let io_err = std::io::Error::new(std::io::ErrorKind::NotFound, "Arquivo ausente");
    let app_err: AppError = io_err.into();
    println!("Erro convertido: {}", app_err.0);
}

⬅️ Voltar ao Índice de Exercícios 📚 Sumário de Tópicos