nfe-core 0.1.2

Core types and error handling for NF-e
Documentation
//! Módulo de erros do nfe-core

use thiserror::Error;

#[derive(Error, Debug)]
pub enum Error {
    #[error("Erro de configuração: {0}")]
    Config(String),

    #[error("Erro no certificado: {0}")]
    Certificado(String),

    #[error("Erro de comunicação: {0}")]
    Comunicacao(String),

    #[error("Erro ao processar XML: {0}")]
    Xml(String),

    #[error("Erro de validação: {0}")]
    Validacao(String),

    #[error("Erro na assinatura digital: {0}")]
    Assinatura(String),

    #[error("Rejeição da SEFAZ (código {codigo}): {mensagem}")]
    Rejeicao { codigo: u32, mensagem: String },

    #[error("Chave de acesso inválida: {0}")]
    ChaveAcessoInvalida(String),

    #[error("CNPJ inválido")]
    InvalidCnpj,

    #[error("Documento não encontrado: {0}")]
    DocumentoNaoEncontrado(String),

    #[error("Erro de IO: {0}")]
    Io(#[from] std::io::Error),

    #[error("Erro interno: {0}")]
    Interno(String),
}

pub type Result<T> = std::result::Result<T, Error>;

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_error_display() {
        let err = Error::Config("Configuração inválida".to_string());
        assert_eq!(
            format!("{}", err),
            "Erro de configuração: Configuração inválida"
        );
    }

    #[test]
    fn test_error_from_io() {
        let io_error = std::io::Error::new(std::io::ErrorKind::NotFound, "arquivo não encontrado");
        let error: Error = io_error.into();
        assert!(matches!(error, Error::Io(_)));
    }
}