pub struct Keywords(/* private fields */);Expand description
A list of Key-Value pairs representing functional information
about locale’s internationalization 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::locale::extensions::unicode::{key, value, Keywords};
let keywords = [(key!("hc"), value!("h23"))]
    .into_iter()
    .collect::<Keywords>();
assert_eq!(&keywords.to_string(), "hc-h23");Access a Keywords object from a Locale:
use icu::locale::{
    extensions::unicode::{key, 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§
Source§impl Keywords
 
impl Keywords
Sourcepub const fn new_single(key: Key, value: Value) -> Self
 
pub const fn new_single(key: Key, value: Value) -> Self
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::locale::locale;
use icu::locale::Locale;
let loc1 = Locale::try_from_str("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
 
pub fn contains_key<Q>(&self, key: &Q) -> bool
Sourcepub fn clear(&mut self) -> Self
 
pub fn clear(&mut self) -> Self
Clears all Unicode extension keywords, leaving Unicode attributes.
Returns the old Unicode extension keywords.
§Examples
use icu::locale::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 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::locale::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);
}Trait Implementations§
Source§impl Display for Keywords
This trait is implemented for compatibility with fmt!.
To create a string, [Writeable::write_to_string] is usually more efficient.
 
impl Display for Keywords
This trait is implemented for compatibility with fmt!.
To create a string, [Writeable::write_to_string] is usually more efficient.
Source§impl Ord for Keywords
 
impl Ord for Keywords
Source§impl PartialOrd for Keywords
 
impl PartialOrd for Keywords
Source§impl Writeable for Keywords
 
impl Writeable for Keywords
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
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.