openpql_range_parser/
error.rs1use super::{Expected, Loc, LocInfo, ParseError, Token};
2
3#[derive(Debug, Clone, PartialEq, Eq)]
5pub enum Error {
6 InvalidToken(LocInfo),
8 UnrecognizedEof(LocInfo, Expected),
10 UnrecognizedToken(LocInfo, Expected),
12 ExtraToken(LocInfo),
14
15 TooManyCardsInRange(LocInfo),
17 NumberOfRanksMismatchInSpan(LocInfo),
19 RankDistanceMismatchInSpan(LocInfo),
21 SuitMismatchInSpan(LocInfo),
23 InvalidSpan(LocInfo),
25 InvalidList(LocInfo),
27 InvalidRank(LocInfo),
29 InvalidSuit(LocInfo),
31}
32
33pub type LalrError<'input> = ParseError<Loc, Token<'input>, Error>;
35
36pub type ResultE<'input, T> = Result<T, LalrError<'input>>;
38
39impl<'input> From<LalrError<'input>> for Error {
40 fn from(err: LalrError<'input>) -> Self {
41 match err {
42 ParseError::InvalidToken { location: l } => Self::InvalidToken((l, l + 1)),
43
44 ParseError::UnrecognizedEof {
45 location: l,
46 expected: v,
47 } => Self::UnrecognizedEof((l, l + 1), v),
48
49 ParseError::UnrecognizedToken {
50 token: t,
51 expected: v,
52 } => Self::UnrecognizedToken((t.0, t.2), v),
53
54 ParseError::ExtraToken { token: t } => Self::ExtraToken((t.0, t.2)),
55
56 ParseError::User { error } => error,
57 }
58 }
59}
60
61impl From<&Error> for LocInfo {
62 fn from(e: &Error) -> Self {
63 match e {
64 Error::InvalidToken(loc)
65 | Error::UnrecognizedEof(loc, _)
66 | Error::UnrecognizedToken(loc, _)
67 | Error::ExtraToken(loc)
68 | Error::TooManyCardsInRange(loc)
69 | Error::NumberOfRanksMismatchInSpan(loc)
70 | Error::RankDistanceMismatchInSpan(loc)
71 | Error::SuitMismatchInSpan(loc)
72 | Error::InvalidSpan(loc)
73 | Error::InvalidList(loc)
74 | Error::InvalidRank(loc)
75 | Error::InvalidSuit(loc) => *loc,
76 }
77 }
78}