rbytes_consulta_cep 0.1.0

Consulta de CEP brasileiro com multi-provedores (ViaCEP, BrasilAPI, etc). Inclui fallback automático, timeout configurável e formatação de endereços.
Documentation
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 {
        // Formata o CEP com hífen
        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)?;

        // Campos opcionais
        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")?;  // Simplificado - sempre None neste exemplo
        write!(f, ", ddd: None")?;  // Simplificado - sempre None neste exemplo
        write!(f, ", siafi: None")?;  // Simplificado - sempre None neste exemplo

        write!(f, " }}")
    }
}