pub mod viacep;
pub mod brasilapi;
pub mod apicep;
pub mod opencep;
pub use viacep::consultar as viacep;
pub use brasilapi::consultar as brasilapi;
pub use apicep::consultar as apicep;
pub use opencep::consultar as opencep;
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum ProviderType {
ViaCep,
BrasilApi,
ApiCep,
OpenCep,
}
impl std::fmt::Display for ProviderType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", match self {
Self::ViaCep => "ViaCEP",
Self::BrasilApi => "BrasilAPI",
Self::ApiCep => "ApiCEP",
Self::OpenCep => "OpenCEP",
})
}
}
pub async fn consultar(
provider: ProviderType, cep: &str ) -> Result<crate::models::Endereco, crate::error::CepError> {
match provider {
ProviderType::ViaCep => viacep::consultar(cep).await,
ProviderType::BrasilApi => brasilapi::consultar(cep).await,
ProviderType::ApiCep => apicep::consultar(cep).await,
ProviderType::OpenCep => opencep::consultar(cep).await,
}
}