nfe_parser/base/error.rs
1//! Erros de parse e processamento da NF-e
2//!
3//! Este módulo define os tipos de erro que podem ocorrer durante
4//! o parsing e processamento de arquivos XML de NF-e.
5//!
6//! ## Tipos de Erro
7//!
8//! - **Io**: Erros de leitura/escrita de arquivo
9//! - **Serde**: Erros de deserialização XML (estrutura inválida, campos faltando, etc.)
10//!
11//! ## Exemplo de Tratamento
12//!
13//! ```rust,ignore
14//! use nfe::{Nfe, Error};
15//!
16//! fn processar_nfe(xml: &str) -> Result<(), Error> {
17//! match xml.parse::<Nfe>() {
18//! Ok(nfe) => println!("NF-e processada: {}", nfe.chave_acesso),
19//! Err(Error::Io(e)) => eprintln!("Erro de arquivo: {}", e),
20//! Err(Error::Serde(e)) => eprintln!("XML inválido: {}", e),
21//! }
22//! Ok(())
23//! }
24//! ```
25
26use derive_more::{Display, Error, From};
27
28/// Tipo de erro retornado pelas operações de parsing da NF-e
29///
30/// Implementa conversão automática (From) dos tipos de erro originais,
31/// permitindo uso do operador `?` para propagação de erros.
32#[derive(Debug, Display, Error, From)]
33pub enum Error {
34 /// Erro de entrada/saída (leitura de arquivo, permissões, etc.)
35 /// Ocorre ao tentar abrir ou ler um arquivo XML
36 #[display(fmt = "Erro de IO: {}", _0)]
37 Io(std::io::Error),
38
39 /// Erro de deserialização XML
40 /// Ocorre quando o XML não está no formato esperado pela SEFAZ
41 /// Exemplos: tags obrigatórias faltando, tipos inválidos, estrutura incorreta
42 #[display(fmt = "Erro de XML: {}", _0)]
43 Serde(quick_xml::de::DeError),
44}