Struct icu_provider::DataLocale
source · pub struct DataLocale {
pub language: Language,
pub script: Option<Script>,
pub region: Option<Region>,
pub variant: Option<Variant>,
pub subdivision: Option<Subtag>,
/* private fields */
}
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§
§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 from_preferences_locale<M: DataMarker>(
locale: LocalePreferences,
) -> Self
pub const fn from_preferences_locale<M: DataMarker>( locale: LocalePreferences, ) -> Self
Returns a DataLocale
usable for the marker M
.
source§impl DataLocale
impl DataLocale
source§impl DataLocale
impl DataLocale
source§impl DataLocale
impl DataLocale
sourcepub fn try_from_str(s: &str) -> Result<Self, ParseError>
pub fn try_from_str(s: &str) -> Result<Self, ParseError>
Parses a DataLocale
.
sourcepub fn try_from_utf8(code_units: &[u8]) -> Result<Self, ParseError>
pub fn try_from_utf8(code_units: &[u8]) -> Result<Self, ParseError>
Parses a DataLocale
from a UTF-8 byte slice.
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 icu_provider::DataLocale;
use std::cmp::Ordering;
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_default(&self) -> bool
pub fn is_default(&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_default());
assert!(!"de-u-sd-denw".parse::<DataLocale>().unwrap().is_default());
assert!(!"und-ES".parse::<DataLocale>().unwrap().is_default());
sourcepub fn into_locale(self) -> Locale
pub fn into_locale(self) -> Locale
Converts this DataLocale
into a [Locale
].
sourcepub fn get_unicode_ext(&self, key: &Key) -> Option<Value>
pub fn get_unicode_ext(&self, key: &Key) -> Option<Value>
Gets the value of the specified Unicode extension keyword for this DataLocale
.
sourcepub fn get_single_unicode_ext(&self, key: &str) -> Option<&str>
pub fn get_single_unicode_ext(&self, key: &str) -> Option<&str>
Like get_unicode_ext
but untyped, easier to use during attributes migration.
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§impl Default for DataLocale
impl Default for DataLocale
source§fn default() -> DataLocale
fn default() -> DataLocale
source§impl Display for DataLocale
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§impl From<&Locale> for DataLocale
impl From<&Locale> for DataLocale
source§impl From<LanguageIdentifier> for DataLocale
impl From<LanguageIdentifier> for DataLocale
source§impl From<Locale> for DataLocale
impl From<Locale> for DataLocale
source§impl FromStr for DataLocale
impl FromStr for 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: Write + ?Sized>(&self, sink: &mut W) -> Result
fn write_to<W: Write + ?Sized>(&self, sink: &mut W) -> Result
write_to_parts
, and discards any
Part
annotations.source§fn writeable_length_hint(&self) -> LengthHint
fn writeable_length_hint(&self) -> LengthHint
impl Eq for DataLocale
Auto Trait Implementations§
impl Freeze for DataLocale
impl RefUnwindSafe for DataLocale
impl Send for DataLocale
impl Sync for DataLocale
impl Unpin for DataLocale
impl UnwindSafe for DataLocale
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more