#[non_exhaustive]pub struct DataLocale {
pub language: Language,
pub script: Option<Script>,
pub region: Option<Region>,
pub variant: Option<Variant>,
pub subdivision: Option<Subtag>,
}
Expand description
A locale type optimized for use in fallbacking and the ICU4X data pipeline.
DataLocale
contains less functionality than Locale
but more than
LanguageIdentifier
for better size and performance while still meeting
the needs of the ICU4X data pipeline.
You can create a DataLocale
from a borrowed Locale
, which is more
efficient than cloning the Locale
, but less efficient than converting an owned
Locale
:
use icu_locale_core::locale;
use icu_provider::DataLocale;
let locale1 = locale!("en-u-ca-buddhist");
let data_locale = DataLocale::from(&locale1);
DataLocale
only supports -u-sd
keywords, to reflect the current state of CLDR data
lookup and fallback. This may change in the future.
use icu_locale_core::{locale, Locale};
use icu_provider::DataLocale;
let locale = "hi-IN-t-en-h0-hybrid-u-attr-ca-buddhist-sd-inas"
.parse::<Locale>()
.unwrap();
assert_eq!(
DataLocale::from(locale),
DataLocale::from(locale!("hi-IN-u-sd-inas"))
);
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. }
syntax; cannot be matched against without a wildcard ..
; and struct update syntax will not work.language: Language
Language subtag
script: Option<Script>
Script subtag
region: Option<Region>
Region subtag
variant: Option<Variant>
Variant subtag
subdivision: Option<Subtag>
Subivision (-u-sd-) subtag
Implementations§
Source§impl DataLocale
impl DataLocale
Sourcepub const fn default() -> DataLocale
pub const fn default() -> DataLocale
const
version of Default::default
Source§impl DataLocale
impl DataLocale
Source§impl DataLocale
impl DataLocale
Sourcepub fn total_cmp(&self, other: &DataLocale) -> Ordering
pub fn total_cmp(&self, other: &DataLocale) -> Ordering
Returns an ordering suitable for use in BTreeSet
.
Sourcepub fn strict_cmp(&self, other: &[u8]) -> Ordering
pub fn strict_cmp(&self, other: &[u8]) -> Ordering
Compare this DataLocale
with BCP-47 bytes.
The return value is equivalent to what would happen if you first converted this
DataLocale
to a BCP-47 string and then performed a byte comparison.
This function is case-sensitive and results in a total order, so it is appropriate for
binary search. The only argument producing Ordering::Equal
is self.to_string()
.
§Examples
use core::cmp::Ordering;
use icu_provider::DataLocale;
let bcp47_strings: &[&str] = &[
"ca",
"ca-ES",
"ca-ES-u-sd-esct",
"ca-ES-valencia",
"cat",
"pl-Latn-PL",
"und",
"und-fonipa",
"zh",
];
for ab in bcp47_strings.windows(2) {
let a = ab[0];
let b = ab[1];
assert_eq!(a.cmp(b), Ordering::Less, "strings: {} < {}", a, b);
let a_loc: DataLocale = a.parse().unwrap();
assert_eq!(
a_loc.strict_cmp(a.as_bytes()),
Ordering::Equal,
"strict_cmp: {} == {}",
a_loc,
a
);
assert_eq!(
a_loc.strict_cmp(b.as_bytes()),
Ordering::Less,
"strict_cmp: {} < {}",
a_loc,
b
);
let b_loc: DataLocale = b.parse().unwrap();
assert_eq!(
b_loc.strict_cmp(b.as_bytes()),
Ordering::Equal,
"strict_cmp: {} == {}",
b_loc,
b
);
assert_eq!(
b_loc.strict_cmp(a.as_bytes()),
Ordering::Greater,
"strict_cmp: {} > {}",
b_loc,
a
);
}
Comparison against invalid strings:
use icu_provider::DataLocale;
let invalid_strings: &[&str] = &[
// Less than "ca-ES"
"CA",
"ar-x-gbp-FOO",
// Greater than "ca-AR"
"ca_ES",
"ca-ES-x-gbp-FOO",
];
let data_locale = "ca-ES".parse::<DataLocale>().unwrap();
for s in invalid_strings.iter() {
let expected_ordering = "ca-AR".cmp(s);
let actual_ordering = data_locale.strict_cmp(s.as_bytes());
assert_eq!(expected_ordering, actual_ordering, "{}", s);
}
Sourcepub fn is_unknown(&self) -> bool
pub fn is_unknown(&self) -> bool
Returns whether this DataLocale
is und
in the locale and extensions portion.
§Examples
use icu_provider::DataLocale;
assert!("und".parse::<DataLocale>().unwrap().is_unknown());
assert!(!"de-u-sd-denw".parse::<DataLocale>().unwrap().is_unknown());
assert!(!"und-ES".parse::<DataLocale>().unwrap().is_unknown());
Sourcepub fn into_locale(self) -> Locale
pub fn into_locale(self) -> Locale
Converts this DataLocale
into a Locale
.
Trait Implementations§
Source§impl Clone for DataLocale
impl Clone for DataLocale
Source§fn clone(&self) -> DataLocale
fn clone(&self) -> DataLocale
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for DataLocale
impl Debug for DataLocale
Source§impl Default for &DataLocale
impl Default for &DataLocale
Source§fn default() -> &DataLocale
fn default() -> &DataLocale
Source§impl Default for DataLocale
impl Default for DataLocale
Source§fn default() -> DataLocale
fn default() -> DataLocale
Source§impl Display for DataLocale
This trait is implemented for compatibility with fmt!
.
To create a string, [Writeable::write_to_string
] is usually more efficient.
impl Display for DataLocale
This trait is implemented for compatibility with fmt!
.
To create a string, [Writeable::write_to_string
] is usually more efficient.
Source§impl From<&LanguageIdentifier> for DataLocale
impl From<&LanguageIdentifier> for DataLocale
Source§fn from(langid: &LanguageIdentifier) -> DataLocale
fn from(langid: &LanguageIdentifier) -> DataLocale
Source§impl From<&Locale> for DataLocale
impl From<&Locale> for DataLocale
Source§fn from(locale: &Locale) -> DataLocale
fn from(locale: &Locale) -> DataLocale
Source§impl From<LanguageIdentifier> for DataLocale
impl From<LanguageIdentifier> for DataLocale
Source§fn from(langid: LanguageIdentifier) -> DataLocale
fn from(langid: LanguageIdentifier) -> DataLocale
Source§impl From<Locale> for DataLocale
impl From<Locale> for DataLocale
Source§fn from(locale: Locale) -> DataLocale
fn from(locale: Locale) -> DataLocale
Source§impl Hash for DataLocale
impl Hash for DataLocale
Source§impl PartialEq for DataLocale
impl PartialEq for DataLocale
Source§impl Writeable for DataLocale
impl Writeable for DataLocale
Source§fn write_to<W>(&self, sink: &mut W) -> Result<(), Error>
fn write_to<W>(&self, sink: &mut W) -> Result<(), Error>
write_to_parts
, and discards any
Part
annotations.Source§fn writeable_length_hint(&self) -> LengthHint
fn writeable_length_hint(&self) -> LengthHint
Source§fn write_to_parts<S>(&self, sink: &mut S) -> Result<(), Error>where
S: PartsWrite + ?Sized,
fn write_to_parts<S>(&self, sink: &mut S) -> Result<(), Error>where
S: PartsWrite + ?Sized,
Part
annotations to the given sink. Errors from the
sink are bubbled up. The default implementation delegates to write_to
,
and doesn’t produce any Part
annotations.