summary refs log tree commit diff stats
path: root/src/errors.rs
diff options
context:
space:
mode:
authorSoniEx2 <endermoneymod@gmail.com>2021-02-07 22:19:21 -0300
committerSoniEx2 <endermoneymod@gmail.com>2021-02-07 22:20:34 -0300
commit69652efe8ad9738a94fef571c8b81e342f96e7b4 (patch)
tree9b02efcb139894ac3b5df2667be313f2a9df4319 /src/errors.rs
parentd81ce99e0d1f1371ba9165a67280a810ee27bf82 (diff)
Finish porting parser
Diffstat (limited to 'src/errors.rs')
-rw-r--r--src/errors.rs36
1 files changed, 32 insertions, 4 deletions
diff --git a/src/errors.rs b/src/errors.rs
index 5c6a0c8..e98483f 100644
--- a/src/errors.rs
+++ b/src/errors.rs
@@ -16,10 +16,38 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
 
-pub struct PatternError;
+/// These are errors that may be returned by the pattern compiler when
+/// compiling a pattern.
+///
+/// "String" here refers to a string literal in the pattern, not the input
+/// string. The input string is referred to as "the input".
+#[derive(Debug)]
+pub enum PatternError<'a> {
+    // Syntax Errors:
+
+    /// The input contains an invalid string escape.
+    StringEscape(usize, &'a str),
+    /// The input ends in the middle of a string literal.
+    StringEnd(usize, &'a str),
+    /// The input contains an invalid regex escape.
+    RegexEscape(usize, &'a str),
+    /// The input ends in the middle of a regex literal.
+    RegexEnd(usize, &'a str),
+    /// The input contains characters that don't make up a token.
+    Token(usize, &'a str),
+
+    // Link Errors:
+
+    /// The input requests a parameter that wasn't provided.
+    UnknownParameter(usize, &'a str),
+    /// The input requests a predicate that wasn't provided.
+    UnknownPredicate(usize, &'a str),
+    /// The input contains an invalid regex.
+    Regex(usize, &'a str, ::regex::Error),
+}
 
 /// Error type returned by the matcher.
-#[derive(Clone)]
+#[derive(Clone, Debug)]
 pub enum MatchError {
     /// Returned if the pattern nests too deeply.
     StackOverflow,
@@ -27,8 +55,8 @@ pub enum MatchError {
     ValidationError,
     /// Returned if the pattern attempts an unsupported operation.
     ///
-    /// In particular, if the PatternTypes doesn't support get or pairs for a
-    /// given value, this error will be returned. It can be treated as a
+    /// In particular, if the PatternTypes doesn't support `get` or `pairs`
+    /// for a given value, this error will be returned. It can be treated as a
     /// ValidationError, or as a bug in the pattern, at the user's discretion.
     UnsupportedOperation,
     /// Returned if an unspecified non-critical error occurred.