4
4
5
5
use cow_rc_str:: CowRcStr ;
6
6
use smallvec:: SmallVec ;
7
+ use std:: error:: Error ;
8
+ use std:: fmt;
7
9
use std:: ops:: BitOr ;
8
10
use std:: ops:: Range ;
9
11
use tokenizer:: { SourceLocation , SourcePosition , Token , Tokenizer } ;
@@ -53,6 +55,18 @@ pub enum BasicParseErrorKind<'i> {
53
55
QualifiedRuleInvalid ,
54
56
}
55
57
58
+ impl < ' i > BasicParseErrorKind < ' i > {
59
+ fn description ( & self ) -> & ' static str {
60
+ match self {
61
+ BasicParseErrorKind :: UnexpectedToken ( _) => "Unexpected token" ,
62
+ BasicParseErrorKind :: EndOfInput => "End of input" ,
63
+ BasicParseErrorKind :: AtRuleInvalid ( _) => "Invalid @ rule" ,
64
+ BasicParseErrorKind :: AtRuleBodyInvalid => "Invalid @ rule body" ,
65
+ BasicParseErrorKind :: QualifiedRuleInvalid => "Invalid qualified rule" ,
66
+ }
67
+ }
68
+ }
69
+
56
70
/// The funamental parsing errors that can be triggered by built-in parsing routines.
57
71
#[ derive( Clone , Debug , PartialEq ) ]
58
72
pub struct BasicParseError < ' i > {
@@ -62,6 +76,14 @@ pub struct BasicParseError<'i> {
62
76
pub location : SourceLocation ,
63
77
}
64
78
79
+ impl < ' i > fmt:: Display for BasicParseError < ' i > {
80
+ fn fmt ( & self , formatter : & mut fmt:: Formatter ) -> fmt:: Result {
81
+ write ! ( formatter, "{}" , self . kind. description( ) )
82
+ }
83
+ }
84
+
85
+ impl < ' i > Error for BasicParseError < ' i > { }
86
+
65
87
impl < ' i , T > From < BasicParseError < ' i > > for ParseError < ' i , T > {
66
88
#[ inline]
67
89
fn from ( this : BasicParseError < ' i > ) -> ParseError < ' i , T > {
@@ -156,6 +178,17 @@ impl<'i, T> ParseError<'i, T> {
156
178
}
157
179
}
158
180
181
+ impl < ' i , T > fmt:: Display for ParseError < ' i , T > {
182
+ fn fmt ( & self , formatter : & mut fmt:: Formatter ) -> fmt:: Result {
183
+ write ! ( formatter, "{}" , match & self . kind {
184
+ ParseErrorKind :: Basic ( basic_kind) => basic_kind. description( ) ,
185
+ ParseErrorKind :: Custom ( _) => "custom" ,
186
+ } )
187
+ }
188
+ }
189
+
190
+ impl < ' i , T > Error for ParseError < ' i , T > where T : fmt:: Debug { }
191
+
159
192
/// The owned input for a parser.
160
193
pub struct ParserInput < ' i > {
161
194
tokenizer : Tokenizer < ' i > ,
0 commit comments