use serde::Deserialize;
use std::fmt;
#[derive(Debug, Deserialize)]
pub struct Endereco {
pub cep: String,
pub logradouro: Option<String>,
pub complemento: Option<String>,
pub bairro: Option<String>,
pub localidade: String,
pub uf: String,
pub ibge: Option<String>,
pub gia: Option<String>,
pub ddd: Option<String>,
pub siafi: Option<String>,
}
impl fmt::Display for Endereco {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let cep_formatado = if self.cep.len() == 8 {
format!("{}-{}", &self.cep[..5], &self.cep[5..])
} else {
self.cep.clone()
};
write!(f, "Endereco {{ ")?;
write!(f, "cep: \"{}\"", cep_formatado)?;
if let Some(logradouro) = &self.logradouro {
write!(f, ", logradouro: \"{}\"", logradouro)?;
} else {
write!(f, ", logradouro: None")?;
}
if let Some(complemento) = &self.complemento {
write!(f, ", complemento: \"{}\"", complemento)?;
} else {
write!(f, ", complemento: None")?;
}
if let Some(bairro) = &self.bairro {
write!(f, ", bairro: \"{}\"", bairro)?;
} else {
write!(f, ", bairro: None")?;
}
write!(f, ", localidade: \"{}\"", self.localidade)?;
write!(f, ", uf: \"{}\"", self.uf)?;
if let Some(ibge) = &self.ibge {
write!(f, ", ibge: \"{}\"", ibge)?;
} else {
write!(f, ", ibge: None")?;
}
write!(f, ", gia: None")?; write!(f, ", ddd: None")?; write!(f, ", siafi: None")?;
write!(f, " }}")
}
}