icu_locid/subtags/
region.rs

1// This file is part of ICU4X. For terms of use, please see the file
2// called LICENSE at the top level of the ICU4X source tree
3// (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
4
5impl_tinystr_subtag!(
6    /// A region subtag (examples: `"US"`, `"CN"`, `"AR"` etc.)
7    ///
8    /// [`Region`] represents a Unicode base language code conformant to the
9    /// [`unicode_region_id`] field of the Language and Locale Identifier.
10    ///
11    /// # Examples
12    ///
13    /// ```
14    /// use icu::locid::subtags::Region;
15    ///
16    /// let region: Region =
17    ///     "DE".parse().expect("Failed to parse a region subtag.");
18    /// ```
19    ///
20    /// [`unicode_region_id`]: https://unicode.org/reports/tr35/#unicode_region_id
21    Region,
22    subtags,
23    region,
24    subtags_region,
25    2..=3,
26    s,
27    if s.len() == 2 {
28        s.is_ascii_alphabetic()
29    } else {
30        s.is_ascii_numeric()
31    },
32    if s.len() == 2 {
33        s.to_ascii_uppercase()
34    } else {
35        s
36    },
37    if s.len() == 2 {
38        s.is_ascii_alphabetic_uppercase()
39    } else {
40        s.is_ascii_numeric()
41    },
42    InvalidSubtag,
43    ["FR", "123"],
44    ["12", "FRA", "b2"],
45);
46
47impl Region {
48    /// Returns true if the Region has an alphabetic code.
49    ///
50    /// # Examples
51    ///
52    /// ```
53    /// use icu::locid::subtags::Region;
54    ///
55    /// let region = Region::try_from_bytes(b"us").expect("Parsing failed.");
56    ///
57    /// assert!(region.is_alphabetic());
58    /// ```
59    pub fn is_alphabetic(&self) -> bool {
60        self.0.len() == 2
61    }
62}