pub struct Keywords(_);
Expand description
A list of Key
-Value
pairs representing functional information
about locale’s internationnalization preferences.
Here are examples of fields used in Unicode:
hc
- Hour Cycle (h11
,h12
,h23
,h24
)ca
- Calendar (buddhist
,gregory
, …)fw
- First Day Of the Week (sun
,mon
,sat
, …)
You can find the full list in Unicode BCP 47 U Extension
section of LDML.
Examples
Manually build up a Keywords
object:
use icu::locid::{
extensions::unicode::Keywords, extensions_unicode_key as key,
extensions_unicode_value as value, locale,
};
let keywords = vec![(key!("hc"), value!("h23"))]
.into_iter()
.collect::<Keywords>();
assert_eq!(&keywords.to_string(), "hc-h23");
Access a Keywords
object from a Locale
:
use icu::locid::{
extensions_unicode_key as key, extensions_unicode_value as value,
Locale,
};
let loc: Locale = "und-u-hc-h23-kc-true".parse().expect("Valid BCP-47");
assert_eq!(loc.extensions.unicode.keywords.get(&key!("ca")), None);
assert_eq!(
loc.extensions.unicode.keywords.get(&key!("hc")),
Some(&value!("h23"))
);
assert_eq!(
loc.extensions.unicode.keywords.get(&key!("kc")),
Some(&value!("true"))
);
assert_eq!(loc.extensions.unicode.keywords.to_string(), "hc-h23-kc");
Implementations
sourceimpl Keywords
impl Keywords
sourcepub const fn new_single(key: Key, value: Value) -> Keywords
pub const fn new_single(key: Key, value: Value) -> Keywords
Create a new list of key-value pairs having exactly one pair, callable in a const
context.
sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns true
if there are no keywords.
Examples
use icu::locid::extensions::unicode::Keywords;
use icu::locid::locale;
use icu::locid::Locale;
let loc1 = Locale::try_from_bytes(b"und-t-h0-hybrid").unwrap();
let loc2 = locale!("und-u-ca-buddhist");
assert!(loc1.extensions.unicode.keywords.is_empty());
assert!(!loc2.extensions.unicode.keywords.is_empty());
sourcepub fn contains_key<Q>(&self, key: &Q) -> bool where
Q: Ord,
Key: Borrow<Q>,
pub fn contains_key<Q>(&self, key: &Q) -> bool where
Q: Ord,
Key: Borrow<Q>,
Returns true
if the list contains a Value
for the specified Key
.
Examples
use icu::locid::{
extensions::unicode::Keywords, extensions_unicode_key as key,
extensions_unicode_value as value,
};
let keywords = vec![(key!("ca"), value!("gregory"))]
.into_iter()
.collect::<Keywords>();
assert!(&keywords.contains_key(&key!("ca")));
sourcepub fn get<Q>(&self, key: &Q) -> Option<&Value> where
Q: Ord,
Key: Borrow<Q>,
pub fn get<Q>(&self, key: &Q) -> Option<&Value> where
Q: Ord,
Key: Borrow<Q>,
Returns a reference to the Value
corresponding to the Key
.
Examples
use icu::locid::{
extensions::unicode::Keywords, extensions_unicode_key as key,
extensions_unicode_value as value,
};
let keywords = vec![(key!("ca"), value!("buddhist"))]
.into_iter()
.collect::<Keywords>();
assert_eq!(keywords.get(&key!("ca")), Some(&value!("buddhist")));
sourcepub fn get_mut<Q>(&mut self, key: &Q) -> Option<&mut Value> where
Q: Ord,
Key: Borrow<Q>,
pub fn get_mut<Q>(&mut self, key: &Q) -> Option<&mut Value> where
Q: Ord,
Key: Borrow<Q>,
Returns a mutable reference to the Value
corresponding to the Key
.
Returns None
if the key doesn’t exist or if the key has no value.
Examples
use icu::locid::{
extensions::unicode::Keywords, extensions_unicode_key as key,
extensions_unicode_value as value,
};
let mut keywords = vec![(key!("ca"), value!("buddhist"))]
.into_iter()
.collect::<Keywords>();
if let Some(value) = keywords.get_mut(&key!("ca")) {
*value = value!("gregory");
}
assert_eq!(keywords.get(&key!("ca")), Some(&value!("gregory")));
sourcepub fn set(&mut self, key: Key, value: Value) -> Option<Value>
pub fn set(&mut self, key: Key, value: Value) -> Option<Value>
Sets the specified keyword, returning the old value if it already existed.
Examples
use icu::locid::extensions::unicode::Key;
use icu::locid::extensions::unicode::Value;
use icu::locid::Locale;
use icu::locid::{
extensions_unicode_key as key, extensions_unicode_value as value,
};
let mut loc: Locale = "und-u-hello-ca-buddhist-hc-h12"
.parse()
.expect("valid BCP-47 identifier");
let old_value = loc
.extensions
.unicode
.keywords
.set(key!("ca"), value!("japanese"));
assert_eq!(old_value, Some(value!("buddhist")));
assert_eq!(loc, "und-u-hello-ca-japanese-hc-h12".parse().unwrap());
sourcepub fn remove<Q>(&mut self, key: Q) -> Option<Value> where
Q: Borrow<Key>,
pub fn remove<Q>(&mut self, key: Q) -> Option<Value> where
Q: Borrow<Key>,
Removes the specified keyword, returning the old value if it existed.
Examples
use icu::locid::extensions::unicode::Key;
use icu::locid::extensions_unicode_key as key;
use icu::locid::Locale;
let mut loc: Locale = "und-u-hello-ca-buddhist-hc-h12"
.parse()
.expect("valid BCP-47 identifier");
loc.extensions.unicode.keywords.remove(key!("ca"));
assert_eq!(loc, "und-u-hello-hc-h12".parse().unwrap());
sourcepub fn clear(&mut self) -> Keywords
pub fn clear(&mut self) -> Keywords
Clears all Unicode extension keywords, leaving Unicode attributes.
Returns the old Unicode extension keywords.
Example
use icu::locid::Locale;
let mut loc: Locale = "und-u-hello-ca-buddhist-hc-h12".parse().unwrap();
loc.extensions.unicode.keywords.clear();
assert_eq!(loc, "und-u-hello".parse().unwrap());
sourcepub fn retain_by_key<F>(&mut self, predicate: F) where
F: FnMut(&Key) -> bool,
pub fn retain_by_key<F>(&mut self, predicate: F) where
F: FnMut(&Key) -> bool,
Retains a subset of keywords as specified by the predicate function.
Examples
use icu::locid::extensions_unicode_key as key;
use icu::locid::Locale;
let mut loc: Locale = "und-u-ca-buddhist-hc-h12-ms-metric".parse().unwrap();
loc.extensions
.unicode
.keywords
.retain_by_key(|&k| k == key!("hc"));
assert_eq!(loc, "und-u-hc-h12".parse().unwrap());
loc.extensions
.unicode
.keywords
.retain_by_key(|&k| k == key!("ms"));
assert_eq!(loc, Locale::UND);
sourcepub fn strict_cmp(&self, other: &[u8]) -> Ordering
pub fn strict_cmp(&self, other: &[u8]) -> Ordering
Compare this Keywords
with BCP-47 bytes.
The return value is equivalent to what would happen if you first converted this
Keywords
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::locid::extensions::unicode::Keywords;
use icu::locid::Locale;
use std::cmp::Ordering;
let bcp47_strings: &[&str] =
&["ca-hebrew", "ca-japanese", "ca-japanese-nu-latn", "nu-latn"];
for ab in bcp47_strings.windows(2) {
let a = ab[0];
let b = ab[1];
assert!(a.cmp(b) == Ordering::Less);
let a_kwds = format!("und-u-{}", a)
.parse::<Locale>()
.unwrap()
.extensions
.unicode
.keywords;
assert!(a_kwds.strict_cmp(a.as_bytes()) == Ordering::Equal);
assert!(a_kwds.strict_cmp(b.as_bytes()) == Ordering::Less);
}
sourcepub fn strict_cmp_iter<'l, I>(&self, subtags: I) -> SubtagOrderingResult<I> where
I: Iterator<Item = &'l [u8]>,
pub fn strict_cmp_iter<'l, I>(&self, subtags: I) -> SubtagOrderingResult<I> where
I: Iterator<Item = &'l [u8]>,
Compare this Keywords
with an iterator of BCP-47 subtags.
This function has the same equality semantics as Keywords::strict_cmp
. It is intended as
a more modular version that allows multiple subtag iterators to be chained together.
For an additional example, see SubtagOrderingResult
.
Examples
use icu::locid::extensions::unicode::Keywords;
use icu::locid::locale;
use std::cmp::Ordering;
let subtags: &[&[u8]] = &[b"ca", b"buddhist"];
let kwds = locale!("und-u-ca-buddhist").extensions.unicode.keywords;
assert_eq!(
Ordering::Equal,
kwds.strict_cmp_iter(subtags.iter().copied()).end()
);
let kwds = locale!("und").extensions.unicode.keywords;
assert_eq!(
Ordering::Less,
kwds.strict_cmp_iter(subtags.iter().copied()).end()
);
let kwds = locale!("und-u-nu-latn").extensions.unicode.keywords;
assert_eq!(
Ordering::Greater,
kwds.strict_cmp_iter(subtags.iter().copied()).end()
);
Trait Implementations
sourceimpl Display for Keywords
impl Display for Keywords
This trait is implemented for compatibility with fmt!
.
To create a string, [Writeable::write_to_string
] is usually more efficient.
sourceimpl Ord for Keywords
impl Ord for Keywords
sourceimpl PartialOrd<Keywords> for Keywords
impl PartialOrd<Keywords> for Keywords
sourcefn partial_cmp(&self, other: &Keywords) -> Option<Ordering>
fn partial_cmp(&self, other: &Keywords) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
1.0.0 · sourcefn lt(&self, other: &Rhs) -> bool
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
1.0.0 · sourcefn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
sourceimpl Writeable for Keywords
impl Writeable for Keywords
sourcefn write_to<W>(&self, sink: &mut W) -> Result<(), Error> where
W: Write + ?Sized,
fn write_to<W>(&self, sink: &mut W) -> Result<(), Error> where
W: Write + ?Sized,
Writes a string to the given sink. Errors from the sink are bubbled up.
The default implementation delegates to write_to_parts
, and discards any
Part
annotations. Read more
sourcefn writeable_length_hint(&self) -> LengthHint
fn writeable_length_hint(&self) -> LengthHint
Returns a hint for the number of UTF-8 bytes that will be written to the sink. Read more
sourcefn 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,
Write bytes and 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. Read more
sourcefn write_to_string(&self) -> Cow<'_, str>
fn write_to_string(&self) -> Cow<'_, str>
Creates a new String
with the data from this Writeable
. Like ToString
,
but smaller and faster. Read more
impl Eq for Keywords
impl StructuralEq for Keywords
impl StructuralPartialEq for Keywords
Auto Trait Implementations
impl RefUnwindSafe for Keywords
impl Send for Keywords
impl Sync for Keywords
impl Unpin for Keywords
impl UnwindSafe for Keywords
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> Separable for T where
T: Display,
impl<T> Separable for T where
T: Display,
sourcefn separate_by_policy(&self, policy: SeparatorPolicy<'_>) -> String
fn separate_by_policy(&self, policy: SeparatorPolicy<'_>) -> String
Adds separators according to the given SeparatorPolicy
. Read more
sourcefn separate_with_commas(&self) -> String
fn separate_with_commas(&self) -> String
Inserts a comma every three digits from the right. Read more
sourcefn separate_with_spaces(&self) -> String
fn separate_with_spaces(&self) -> String
Inserts a space every three digits from the right. Read more
sourcefn separate_with_dots(&self) -> String
fn separate_with_dots(&self) -> String
Inserts a period every three digits from the right. Read more
sourcefn separate_with_underscores(&self) -> String
fn separate_with_underscores(&self) -> String
Inserts an underscore every three digits from the right. Read more
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more