• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
5 use displaydoc::Display;
6 
7 /// List of parser errors that can be generated
8 /// while parsing [`LanguageIdentifier`](crate::LanguageIdentifier), [`Locale`](crate::Locale),
9 /// [`subtags`](crate::subtags) or [`extensions`](crate::extensions).
10 #[derive(Display, Debug, PartialEq, Copy, Clone)]
11 #[non_exhaustive]
12 pub enum ParseError {
13     /// Invalid language subtag.
14     ///
15     /// # Examples
16     ///
17     /// ```
18     /// use icu::locale::subtags::Language;
19     /// use icu::locale::ParseError;
20     ///
21     /// assert_eq!("x2".parse::<Language>(), Err(ParseError::InvalidLanguage));
22     /// ```
23     #[displaydoc("The given language subtag is invalid")]
24     InvalidLanguage,
25 
26     /// Invalid script, region or variant subtag.
27     ///
28     /// # Examples
29     ///
30     /// ```
31     /// use icu::locale::subtags::Region;
32     /// use icu::locale::ParseError;
33     ///
34     /// assert_eq!("#@2X".parse::<Region>(), Err(ParseError::InvalidSubtag));
35     /// ```
36     #[displaydoc("Invalid subtag")]
37     InvalidSubtag,
38 
39     /// Invalid extension subtag.
40     ///
41     /// # Examples
42     ///
43     /// ```
44     /// use icu::locale::extensions::unicode::Key;
45     /// use icu::locale::ParseError;
46     ///
47     /// assert_eq!("#@2X".parse::<Key>(), Err(ParseError::InvalidExtension));
48     /// ```
49     #[displaydoc("Invalid extension")]
50     InvalidExtension,
51 
52     /// Duplicated extension.
53     ///
54     /// # Examples
55     ///
56     /// ```
57     /// use icu::locale::Locale;
58     /// use icu::locale::ParseError;
59     ///
60     /// assert_eq!(
61     ///     "und-u-hc-h12-u-ca-calendar".parse::<Locale>(),
62     ///     Err(ParseError::DuplicatedExtension)
63     /// );
64     /// ```
65     #[displaydoc("Duplicated extension")]
66     DuplicatedExtension,
67 }
68 
69 impl core::error::Error for ParseError {}
70