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.