Skip to main content

nfe_parser/base/
endereco.rs

1//! Endereço da Nota Fiscal Eletrônica
2//!
3//! Este módulo contém a estrutura para representar endereços
4//! do emitente e destinatário da NF-e.
5
6use super::Error;
7use serde::{Deserialize, Serialize};
8use std::str::FromStr;
9
10/// Endereço completo
11///
12/// Representa o endereço do emitente ou destinatário da NF-e.
13#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
14#[serde(rename = "Endereco")]
15pub struct Endereco {
16    /// Logradouro (rua, avenida, etc.)
17    #[serde(rename = "xLgr")]
18    pub logradouro: String,
19    /// Número do endereço
20    #[serde(rename = "nro")]
21    pub numero: String,
22    /// Complemento do endereço
23    #[serde(rename = "xCpl")]
24    #[serde(skip_serializing_if = "Option::is_none")]
25    #[serde(default)]
26    pub complemento: Option<String>,
27    /// Bairro
28    #[serde(rename = "xBairro")]
29    pub bairro: String,
30    /// Código do município (IBGE)
31    #[serde(rename = "cMun")]
32    pub codigo_municipio: u32,
33    /// Nome do município
34    #[serde(rename = "xMun")]
35    pub nome_municipio: String,
36    /// Sigla da UF
37    #[serde(rename = "UF")]
38    pub sigla_uf: String,
39    /// CEP (8 dígitos)
40    #[serde(rename = "CEP")]
41    pub cep: String,
42    /// Código do país (1058 para Brasil)
43    #[serde(rename = "cPais")]
44    #[serde(skip_serializing_if = "Option::is_none")]
45    #[serde(default)]
46    pub codigo_pais: Option<String>,
47    /// Nome do país
48    #[serde(rename = "xPais")]
49    #[serde(skip_serializing_if = "Option::is_none")]
50    #[serde(default)]
51    pub nome_pais: Option<String>,
52    /// Telefone
53    #[serde(rename = "fone")]
54    #[serde(skip_serializing_if = "Option::is_none")]
55    #[serde(default)]
56    pub telefone: Option<String>,
57}
58
59impl FromStr for Endereco {
60    type Err = Error;
61
62    fn from_str(s: &str) -> Result<Self, Self::Err> {
63        quick_xml::de::from_str(s).map_err(|e| e.into())
64    }
65}
66
67impl ToString for Endereco {
68    fn to_string(&self) -> String {
69        quick_xml::se::to_string(self).expect("Falha ao serializar o endereço")
70    }
71}
72
73impl Default for Endereco {
74    fn default() -> Self {
75        Self {
76            logradouro: String::new(),
77            numero: String::new(),
78            complemento: None,
79            bairro: String::new(),
80            codigo_municipio: 0,
81            nome_municipio: String::new(),
82            sigla_uf: String::new(),
83            cep: String::new(),
84            codigo_pais: Some("1058".to_string()),
85            nome_pais: Some("BRASIL".to_string()),
86            telefone: None,
87        }
88    }
89}