icu_pattern/parser/
token.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 alloc::borrow::Cow;
6
7/// A [`PatternItem`] with additional detail returned by the [`Parser`].
8///
9/// ✨ *Enabled with the `alloc` Cargo feature.*
10///
11/// # Examples
12///
13/// ```
14/// use icu_pattern::{ParsedPatternItem, Parser, ParserOptions};
15///
16/// let input = "{0}, {1}";
17///
18/// let mut parser = Parser::new(input, ParserOptions::default());
19///
20/// let mut result = vec![];
21///
22/// while let Some(element) =
23///     parser.try_next().expect("Failed to advance iterator")
24/// {
25///     result.push(element);
26/// }
27///
28/// assert_eq!(
29///     result,
30///     &[
31///         ParsedPatternItem::Placeholder(0),
32///         ParsedPatternItem::Literal {
33///             content: ", ".into(),
34///             quoted: false
35///         },
36///         ParsedPatternItem::Placeholder(1),
37///     ]
38/// );
39/// ```
40///
41/// # Type parameters
42///
43/// - `P`: A placeholder type which implements [`FromStr`].
44///
45/// # Lifetimes
46///
47/// - `s`: The life time of an input string slice being parsed.
48///
49/// [`Parser`]: crate::Parser
50/// [`PatternItem`]: crate::PatternItem
51/// [`FromStr`]: core::str::FromStr
52#[derive(PartialEq, Debug, Clone)]
53#[non_exhaustive]
54pub enum ParsedPatternItem<'s, P> {
55    Placeholder(P),
56    Literal { content: Cow<'s, str>, quoted: bool },
57}
58
59impl<'s, P> From<(&'s str, bool)> for ParsedPatternItem<'s, P> {
60    fn from(input: (&'s str, bool)) -> Self {
61        Self::Literal {
62            content: Cow::Borrowed(input.0),
63            quoted: input.1,
64        }
65    }
66}