geo-kit
Typed newtypes for validated geo primitives — postcodes, country codes, coordinates, addresses.
Purpose
geo-kit is an L0 leaf crate providing validated newtypes for UK postcodes, US ZIP codes, ISO 3166-1 alpha-2 country codes, geographic coordinates, and postal addresses. Each type guarantees its invariants at construction time.
Types
| Type | Validation |
|---|---|
UkPostcode |
UK postcode ^[A-Z]{1,2}[0-9][A-Z0-9]? [0-9][A-Z]{2}$, space optional, uppercase normalized |
UsZipCode |
US ZIP ^\d{5}(-\d{4})?$ |
Postcode |
Generic `Uk |
CountryCode |
ISO 3166-1 alpha-2 ^[A-Z]{2}$, with country_name() mapping |
Coords |
lat -90..=90, lon -180..=180, finite |
Address |
line1/city non-empty, postcode/country valid, optional coords |
Features
std(default) — enablesstdsupportserde—Serialize/Deserializetransparent for newtypes, derived forCoords/Addressregex— regex-backed validation (more precise where applicable)no_std—no_stdcompatible (extern crate alloc)
No unsafe code (#![forbid(unsafe_code)]), #![deny(missing_docs)].
Usage
use ;
let pc = parse.expect;
assert_eq!;
// Space optional, lowercase normalized
let pc2 = parse.expect;
assert_eq!;
let cc = parse.expect;
assert_eq!;
let coords = new.expect;
assert!;
let addr = new.expect;
assert_eq!;
// All postcode/country types impl TryFrom<String>, FromStr, Display, Deref<Target=str>, AsRef<str>
let zip: UsZipCode = "90210".parse.expect;
let generic: Postcode = "90210-1234".parse.expect;
No_Std
= { = "0.1", = false }
License
MIT OR Apache-2.0