Simple implementation of the algorithm defined in the linked spec. The goal is for src/fetch/mod.rs to provide a platform-agnostic interface for querying categories, with the available categories based off the modules available in ICU4X, but for now this is unix-only.
LIH6JCXY5GMYQPU5L6HY2NOMJDMEW54THPKJ6YXI62Y2SVXFIAXQC use std::env;enum PosixLocaleCategory {CType,Collate,Messages,Monetary,Numeric,Time,Address,Identification,Measurement,Name,Paper,Telephone,}impl PosixLocaleCategory {fn as_str(&self) -> &str {match self {Self::CType => "LC_CTYPE",Self::Collate => "LC_COLLATE",Self::Messages => "LC_MESSAGES",Self::Monetary => "LC_MONETARY",Self::Numeric => "LC_NUMERIC",Self::Time => "LC_TIME",Self::Address => "LC_ADDRESS",Self::Identification => "LC_IDENTIFICATION",Self::Measurement => "LC_MEASUREMENT",Self::Name => "LC_NAME",Self::Paper => "LC_PAPER",Self::Telephone => "LC_TELEPHONE",}}}impl PosixLocaleCategory {/// Query the locale following the POSIX spec:/// https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_02////// Order of precedence:/// 1. LC_ALL/// 2. LC_{NUMERIC, TIME, etc}/// 3. LANG/// 4. Default locale (handled by caller, this function will return None)fn get_locale(&self) -> Option<String> {if let Ok(global_locale) = env::var("LC_ALL") {Some(global_locale)} else if let Ok(category_locale) = env::var(self.as_str()) {Some(category_locale)} else if let Ok(lang) = env::var("LANG") {Some(lang)} else {None}}}
mod unix;