Structure & Formats
A country code always has two characters, both uppercase letters.
CountryCode exposes the value through two accessors:
CountryCode::as_str(): the two character code, as a&str.CountryCode::as_bytes(): the two raw bytes, as a&[u8; 2].
A country code has no punctuated form. Its canonical rendering is simply the two character string, so there is no separate “compact vs. formatted” distinction. See Formatting & Display.
What is modeled
This crate models exactly one thing: the officially assigned ISO 3166-1 alpha-2 code.
- Both letters together must name a code that the standard officially assigns. The set of assigned codes is embedded as a compile time bitmap.
- Reserved codes such as
EUandUKare not assigned, so they are rejected. - User assigned ranges (for example
AA,QMtoQZ,XAtoXZ, andZZ) are not assigned, so they are rejected. - Codes that were once assigned and later withdrawn are rejected.
use ftracker_identifiers::CountryCode;
let usa = CountryCode::parse("US").unwrap();
assert_eq!(usa.as_str(), "US");
let brazil = CountryCode::parse("BR").unwrap();
assert_eq!(brazil.as_bytes(), b"BR");
Codes, not names
This crate embeds only the set of assigned codes. It does not embed country names, the alpha-3 code, or the numeric code.
As a result, CountryCode can confirm that US is an assigned code and reject ZZ as unassigned, but it will not
resolve US to “United States of America”. If you need the name or the other code forms, consult the ISO 3166-1
standard itself.
A note on ordering
CountryCode derives Ord directly over its underlying ASCII bytes, which matches str ordering on
CountryCode::as_str(). This is lexicographic string order. Sorting arranges codes alphabetically and carries no
geographic meaning beyond that.