Skip to main content

nfe_parser/base/
dest.rs

1//! Destinatário da Nota Fiscal Eletrônica
2//!
3//! Este módulo contém as estruturas para representar o destinatário
4//! (comprador/cliente) da NF-e.
5
6use super::endereco::Endereco;
7use super::Error;
8use serde::{Deserialize, Serialize};
9use serde_repr::{Deserialize_repr, Serialize_repr};
10use std::str::FromStr;
11
12/// Dados do destinatário da NFe
13#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
14#[serde(rename = "dest")]
15pub struct Destinatario {
16    /// CNPJ do destinatário (14 dígitos)
17    #[serde(rename = "CNPJ")]
18    pub cnpj: String,
19    /// Razão social ou nome do destinatário
20    #[serde(rename = "xNome")]
21    #[serde(skip_serializing_if = "Option::is_none")]
22    #[serde(default)]
23    pub razao_social: Option<String>,
24    /// Endereço do destinatário
25    #[serde(skip_serializing_if = "Option::is_none")]
26    #[serde(rename = "enderDest")]
27    #[serde(default)]
28    pub endereco: Option<Endereco>,
29    /// Inscrição Estadual do destinatário
30    #[serde(rename = "IE")]
31    #[serde(skip_serializing_if = "Option::is_none")]
32    #[serde(default)]
33    pub ie: Option<String>,
34    /// Indicador da IE do destinatário
35    #[serde(rename = "indIEDest")]
36    pub indicador_ie: IndicadorContribuicaoIe,
37}
38
39/// Indicador da IE do destinatário
40#[derive(Debug, Eq, PartialEq, Copy, Clone, Deserialize_repr, Serialize_repr)]
41#[repr(u8)]
42pub enum IndicadorContribuicaoIe {
43    /// Contribuinte do ICMS
44    ContribuinteIe = 1,
45    /// Isento de Inscrição Estadual
46    IsentoIe = 2,
47    /// Não Contribuinte
48    NaoContribuinteIe = 9,
49}
50
51impl FromStr for Destinatario {
52    type Err = Error;
53
54    fn from_str(s: &str) -> Result<Self, Self::Err> {
55        quick_xml::de::from_str(s).map_err(|e| e.into())
56    }
57}
58
59impl ToString for Destinatario {
60    fn to_string(&self) -> String {
61        quick_xml::se::to_string(self).expect("Falha ao serializar destinatário")
62    }
63}