unic_locale_impl/parser/
mod.rs

1pub mod errors;
2
3pub use self::errors::ParserError;
4use super::extensions::ExtensionsMap;
5use super::Locale;
6use unic_langid_impl::LanguageIdentifier;
7
8pub fn parse_locale<S: AsRef<[u8]>>(t: S) -> Result<Locale, ParserError> {
9    let mut iter = t.as_ref().split(|c| *c == b'-' || *c == b'_').peekable();
10
11    let id = LanguageIdentifier::try_from_iter(&mut iter, true)
12        .map_err(|_| ParserError::InvalidLanguage)?;
13
14    let extensions = ExtensionsMap::try_from_iter(&mut iter)?;
15    Ok(Locale { id, extensions })
16}