1use thiserror::Error;
4
5#[derive(Debug, Clone, PartialEq, Eq, Error)]
7#[non_exhaustive]
8pub enum ParseError {
9 #[error("invalid color: {0}")]
11 InvalidColor(String),
12
13 #[error("invalid style: {0}")]
15 InvalidStyle(String),
16
17 #[error("invalid markup: {0}")]
19 InvalidMarkup(String),
20
21 #[error("unclosed tag: {0}")]
23 UnclosedTag(String),
24
25 #[error("unexpected closing tag: {0}")]
27 UnexpectedClosingTag(String),
28
29 #[error("no emoji called {0:?}")]
31 NoEmoji(String),
32}
33
34impl ParseError {
35 pub fn invalid_color(s: impl Into<String>) -> Self {
37 ParseError::InvalidColor(s.into())
38 }
39
40 pub fn invalid_style(s: impl Into<String>) -> Self {
42 ParseError::InvalidStyle(s.into())
43 }
44
45 pub fn invalid_markup(s: impl Into<String>) -> Self {
47 ParseError::InvalidMarkup(s.into())
48 }
49
50 pub fn no_emoji(s: impl Into<String>) -> Self {
52 ParseError::NoEmoji(s.into())
53 }
54}
55
56pub type Result<T> = std::result::Result<T, ParseError>;