Struct DataLocale
#[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§
§impl DataLocale
impl DataLocale
pub const fn default() -> DataLocale
pub const fn default() -> DataLocale
const
version of Default::default
§impl DataLocale
impl DataLocale
§impl DataLocale
impl DataLocale
pub fn try_from_str(s: &str) -> Result<DataLocale, ParseError>
pub fn try_from_str(s: &str) -> Result<DataLocale, ParseError>
Parses a DataLocale
.
pub fn try_from_utf8(code_units: &[u8]) -> Result<DataLocale, ParseError>
pub fn try_from_utf8(code_units: &[u8]) -> Result<DataLocale, ParseError>
Parses a DataLocale
from a UTF-8 byte slice.
pub fn total_cmp(&self, other: &DataLocale) -> Ordering
pub fn total_cmp(&self, other: &DataLocale) -> Ordering
Returns an ordering suitable for use in BTreeSet
.
pub 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);
}
pub 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());
pub fn into_locale(self) -> Locale
pub fn into_locale(self) -> Locale
Converts this DataLocale
into a Locale
.
Trait Implementations§
§impl Clone for DataLocale
impl Clone for DataLocale
§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 more§impl Debug for DataLocale
impl Debug for DataLocale
§impl Default for &DataLocale
impl Default for &DataLocale
§fn default() -> &DataLocale
fn default() -> &DataLocale
§impl Default for DataLocale
impl Default for DataLocale
§fn default() -> DataLocale
fn default() -> 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.
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 From<&LanguageIdentifier> for DataLocale
impl From<&LanguageIdentifier> for DataLocale
§fn from(langid: &LanguageIdentifier) -> DataLocale
fn from(langid: &LanguageIdentifier) -> DataLocale
§impl From<&Locale> for DataLocale
impl From<&Locale> for DataLocale
§fn from(locale: &Locale) -> DataLocale
fn from(locale: &Locale) -> DataLocale
§impl From<LanguageIdentifier> for DataLocale
impl From<LanguageIdentifier> for DataLocale
§fn from(langid: LanguageIdentifier) -> DataLocale
fn from(langid: LanguageIdentifier) -> DataLocale
§impl From<Locale> for DataLocale
impl From<Locale> for DataLocale
§fn from(locale: Locale) -> DataLocale
fn from(locale: Locale) -> DataLocale
§impl FromStr for DataLocale
impl FromStr for DataLocale
§type Err = ParseError
type Err = ParseError
§fn from_str(s: &str) -> Result<DataLocale, <DataLocale as FromStr>::Err>
fn from_str(s: &str) -> Result<DataLocale, <DataLocale as FromStr>::Err>
s
to return a value of this type. Read more§impl Hash for DataLocale
impl Hash for DataLocale
§impl PartialEq for DataLocale
impl PartialEq for DataLocale
§impl Writeable for DataLocale
impl Writeable for DataLocale
§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.§fn writeable_length_hint(&self) -> LengthHint
fn writeable_length_hint(&self) -> LengthHint
§fn write_to_string(&self) -> Cow<'_, str>
fn write_to_string(&self) -> Cow<'_, str>
String
with the data from this Writeable
. Like ToString
,
but smaller and faster. Read moreimpl Copy for DataLocale
impl Eq for DataLocale
impl StructuralPartialEq 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§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