Skill de Tratamento de Erros
Design e refatorações de thiserror / anyhow - uma Skill de Agente para serviços e bibliotecas Rust 1.97.0.
Busque em todas as páginas da documentação
Design e refatorações de thiserror / anyhow - uma Skill de Agente para serviços e bibliotecas Rust 1.97.0.
Refatora erros de string e cadeias de unwrap em enums thiserror em bibliotecas, anyhow::Result em binários, contexto via .context(), e mapeamentos IntoResponse do Axum. Adiciona implementações From e #[non_exhaustive] onde as APIs evoluem.
unwrap no caminho de produçãoBox<dyn Error>failure ou error-chain| Entrada | Por quê |
|---|---|
| Tipo do Crate | política lib vs bin |
| Consumidores de erro | match vs propagar |
| Exposição HTTP | tabela de mapeamento de código de status |
| Política de backtrace | RUST_BACKTRACE em produção |
error.rs com enums tipadosmain retornando anyhow::ResultResult<T, AppError> com IntoResponseanyhow em assinaturas públicas.expect em libs - retorne Result.Display - implementação manual quando necessário.rg 'unwrap\(|expect\(' src/ --type rust
cargo clippy -- -D clippy::unwrap_used
cargo test error_use axum::{http::StatusCode, response::IntoResponse};
use thiserror::Error;
#[derive(Debug, Error)]
pub enum AppError {
#[error("não encontrado")]
NotFound,
#[error(transparent)]
Internal(#[from] anyhow::Error),
}
impl IntoResponse for AppError {
fn into_response(self) -> axum::response::Response {
let status = match self {
AppError::NotFound => StatusCode::NOT_FOUND,
AppError::Internal(_) => StatusCode::INTERNAL_SERVER_ERROR,
};
(status, self.to_string()).into_response()
}
}Tudo bem para testes de integração; testes unitários frequentemente afirmam variantes de erro específicas.
Incremental: novos módulos usam thiserror; envolve o legado nas fronteiras.
Apenas bugs reais após validação; erros do usuário permanecem Result.
Versões da Stack: Esta página foi escrita para Rust 1.97.0 (edição 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4, e Polars 0.46+.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026