diff options
| author | Murilo Ijanc <[email protected]> | 2026-07-27 20:33:37 -0300 |
|---|---|---|
| committer | Murilo Ijanc <[email protected]> | 2026-07-27 20:33:37 -0300 |
| commit | 487b4c5628c02130580c675925a1d64b09a5f6cb (patch) | |
| tree | 240338af0c2c246bb2c689464f63d70b1f27f240 /src/lib.rs | |
| parent | 4a8c3b675df4b1a6b29904fc2af60605002a7f9e (diff) | |
| download | rust-487b4c5628c02130580c675925a1d64b09a5f6cb.tar.gz | |
A 404 from the API now brings a "faixa" naming the municipality the CEP
would have belonged to, and NotFound carries it. A CEP that fails is
rarely a random number: it is usually someone who knows the city and
guessed the digits, so naming the city turns a dead end into an answer
the caller can show.
It stays an error. The range it carries is the CEPs that actually exist
there, not the bounds the Correios publish — those start at the very CEP
that just failed — and it is sparse, which is what "ceps" measures. The
field is decoration on a failure, so parsing it is entirely defensive:
absent, null or malformed all yield None rather than costing a clean
not-found.
Breaking: NotFound gained a field, hence 0.2.0.
Diffstat (limited to 'src/lib.rs')
| -rw-r--r-- | src/lib.rs | 17 |
1 files changed, 16 insertions, 1 deletions
@@ -44,6 +44,21 @@ //! } //! ``` //! +//! A CEP that does not exist is rarely a random number — usually someone knew +//! the city and guessed the digits. So [`Error::NotFound`] carries the +//! municipality that CEP would have belonged to, when the API can name one: +//! +//! ```no_run +//! # let cep_from_form = "25845000"; +//! if let Err(err @ cepis::Error::NotFound { .. }) = cepis::lookup(cep_from_form) { +//! match err.faixa() { +//! // "no such CEP in Areal/RJ" — still not found, just better phrased +//! Some(faixa) => println!("no such CEP in {}", faixa.municipality()), +//! None => println!("no such CEP"), +//! } +//! } +//! ``` +//! //! Note on field names: the API surface is English, but the **data fields keep //! the API's own Portuguese names** (`logradouro`, `bairro`, `localidade`). //! What you read in the JSON is what you access on the value. @@ -65,7 +80,7 @@ pub use crate::client::{ Client, ClientBuilder, DEFAULT_URL, MAX_BATCH, RETRIABLE_STATUS, normalize_cep, }; pub use crate::error::{Error, Result}; -pub use crate::model::{Address, Geo, Health}; +pub use crate::model::{Address, Faixa, Geo, Health}; /// The version of this library, as sent in the `User-Agent`. pub const VERSION: &str = env!("CARGO_PKG_VERSION"); |