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 } => {
43 Self::InvalidToken((l, l + 1))
44 }
45
46 ParseError::UnrecognizedEof {
47 location: l,
48 expected: v,
49 } => Self::UnrecognizedEof((l, l + 1), v),
50
51 ParseError::UnrecognizedToken {
52 token: t,
53 expected: v,
54 } => Self::UnrecognizedToken((t.0, t.2), v),
55
56 ParseError::ExtraToken { token: t } => Self::ExtraToken((t.0, t.2)),
57
58 ParseError::User { error } => error,
59 }
60 }
61}
62
63impl From<&Error> for LocInfo {
64 fn from(e: &Error) -> Self {
65 match e {
66 Error::InvalidToken(loc)
67 | Error::UnrecognizedEof(loc, _)
68 | Error::UnrecognizedToken(loc, _)
69 | Error::ExtraToken(loc)
70 | Error::TooManyCardsInRange(loc)
71 | Error::NumberOfRanksMismatchInSpan(loc)
72 | Error::RankDistanceMismatchInSpan(loc)
73 | Error::SuitMismatchInSpan(loc)
74 | Error::InvalidSpan(loc)
75 | Error::InvalidList(loc)
76 | Error::InvalidRank(loc)
77 | Error::InvalidSuit(loc) => *loc,
78 }
79 }
80}