icu_pattern/parser/
error.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
5use core::fmt::Debug;
6use displaydoc::Display;
7
8/// An error returned when parsing a pattern.
9///
10/// ✨ *Enabled with the `alloc` Cargo feature.*
11///
12/// # Examples
13/// ```
14/// use icu_pattern::{Parser, ParserError, ParserOptions};
15///
16/// let mut parser = Parser::<usize>::new("{0", ParserOptions::default());
17/// assert_eq!(Err(ParserError::UnclosedPlaceholder), parser.try_next());
18/// ```
19///
20/// # Type parameters
21///
22/// - `E`: An error of the replacement type which implements [`FromStr`].
23///
24/// [`FromStr`]: core::str::FromStr
25#[derive(Display, Debug, PartialEq)]
26#[non_exhaustive]
27pub enum ParserError<E>
28where
29    E: Debug,
30{
31    /// Encountered an illegal character.
32    #[displaydoc("Illegal character: {0}.")]
33    IllegalCharacter(char),
34
35    /// Placeholder hould not be parsed from the given string slice.
36    #[displaydoc("Invalid placeholder: {0:?}")]
37    InvalidPlaceholder(E),
38
39    /// The pattern contains an unclosed placeholder.
40    #[displaydoc("Unclosed placeholder")]
41    UnclosedPlaceholder,
42
43    /// The pattern contains an unclosed quoted literal.
44    #[displaydoc("Unclosed quoted literal")]
45    UnclosedQuotedLiteral,
46}
47
48impl<E: Debug> core::error::Error for ParserError<E> {}