Skip to main content

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}