use super::Error;
use serde::{Deserialize, Serialize};
use std::str::FromStr;
#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
#[serde(rename = "Endereco")]
pub struct Endereco {
#[serde(rename = "xLgr")]
pub logradouro: String,
#[serde(rename = "nro")]
pub numero: String,
#[serde(rename = "xCpl")]
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
pub complemento: Option<String>,
#[serde(rename = "xBairro")]
pub bairro: String,
#[serde(rename = "cMun")]
pub codigo_municipio: u32,
#[serde(rename = "xMun")]
pub nome_municipio: String,
#[serde(rename = "UF")]
pub sigla_uf: String,
#[serde(rename = "CEP")]
pub cep: String,
#[serde(rename = "cPais")]
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
pub codigo_pais: Option<String>,
#[serde(rename = "xPais")]
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
pub nome_pais: Option<String>,
#[serde(rename = "fone")]
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
pub telefone: Option<String>,
}
impl FromStr for Endereco {
type Err = Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
quick_xml::de::from_str(s).map_err(|e| e.into())
}
}
impl ToString for Endereco {
fn to_string(&self) -> String {
quick_xml::se::to_string(self).expect("Falha ao serializar o endereço")
}
}
impl Default for Endereco {
fn default() -> Self {
Self {
logradouro: String::new(),
numero: String::new(),
complemento: None,
bairro: String::new(),
codigo_municipio: 0,
nome_municipio: String::new(),
sigla_uf: String::new(),
cep: String::new(),
codigo_pais: Some("1058".to_string()),
nome_pais: Some("BRASIL".to_string()),
telefone: None,
}
}
}