🧩 Exercícios: Tratamento Idiomático de Erros, Anyhow e Thiserror
Spec Sistemas Com Rust • Trilha Progressiva em 4 Níveis
🧭 Navegação Pedagógica
-
📖 Teoria do Capítulo 💻 Exemplos 📊 Slides 🧠 Quiz
🎯 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:
- Implementar
DisplayeErrormanualmente 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)
- Salve o arquivo como:
Atividade_16_1_SeuNome - 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:
- 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)
- Salve o arquivo como:
Atividade_16_2_SeuNome - 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:
- Utilizar
anyhow::Contextpara 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)
- Salve o arquivo como:
Atividade_16_3_SeuNome - 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:
- Implementar
From<std::io::Error> for ServicoErropara propagação transparente com?.
Resultado Esperado
Erros de I/O convertidos automaticamente para o tipo de erro corporativo.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_16_4_SeuNome - 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 |