thiserror e anyhow

Os crates thiserror e anyhow são amplamente utilizados para simplificar o tratamento de erros.

  • thiserror é frequentemente usado em bibliotecas para criar tipos de erro personalizados que implementam From<T>.
  • anyhow é frequentemente usado por aplicações para ajudar no tratamento de erros em funções, incluindo adicionar informações contextuais aos seus erros.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Speaker Notes

This slide should take about 5 minutes.

thiserror

  • A macro Error é fornecida por thiserror e possui vários atributos úteis para ajudar a definir tipos de erro de forma compacta.
  • O trait std::error::Error é derivado automaticamente.
  • A mensagem de #[error] é usada para derivar o trait Display.

anyhow

  • anyhow::Error é essencialmente um wrapper em torno de Box<dyn Error>. Como tal, geralmente não é uma boa escolha para a API pública de uma biblioteca, mas é amplamente utilizado em aplicações.
  • anyhow::Result<V> é um alias de tipo para Result<V, anyhow::Error>.
  • O tipo de erro real dentro dele pode ser extraído para exame, se necessário.
  • A funcionalidade fornecida por anyhow::Result<T> pode ser familiar para desenvolvedores Go, pois fornece padrões de uso e ergonomia semelhantes a (T, error) de Go.
  • anyhow::Context é um trait implementado para os tipos padrão Result e Option. use anyhow::Context é necessário para habilitar .context() e .with_context() nesses tipos.