summary refs log tree commit diff stats
path: root/src/errors.rs
blob: 914b70a99bef403796e49ccb26e25e1e20dd4b00 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// Copyright (C) 2021-2022 Soni L.
// SPDX-License-Identifier: MIT OR Apache-2.0

//! <!-- TODO figure out module-level docs for this -->

// #[cfg(doc)]
// use crate::PatternTypes;

/// 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 pattern".
#[derive(Debug)]
#[non_exhaustive]
pub enum PatternError<'a> {
    // Syntax Errors:

    /// The pattern contains an invalid string escape.
    StringEscape(usize, &'a str),
    /// The pattern ends in the middle of a string literal.
    StringEnd(usize, &'a str),
    /// The pattern contains an invalid regex escape.
    RegexEscape(usize, &'a str),
    /// The pattern ends in the middle of a regex literal.
    RegexEnd(usize, &'a str),
    /// The pattern contains characters that don't make up a token.
    Token(usize, &'a str),

    // Link Errors:

    /// The pattern requests a parameter that wasn't provided.
    UnknownParameter(usize, &'a str),
    /// The pattern requests a predicate that wasn't provided.
    UnknownPredicate(usize, &'a str),
    /// The pattern contains an invalid regex.
    Regex(usize, &'a str, ::regex::Error),

    // Extra Errors:

    /// The pattern contains a token which has not yet been implemented.
    Unimplemented(usize, &'a str),
}

/// These are errors that may be returned by the matcher when matching a
/// pattern.
// #[derive(Clone, Debug)]
#[derive(Debug)]
#[non_exhaustive]
pub enum MatchError {
     /// Returned if the pattern nests too deeply.
     StackOverflow,
     /// Returned if the pattern rejects the input.
     ValidationError,
     /// Returned if the pattern contains conflicting/unsatisfiable type
     /// requirements.
     Unsatisfiable,
}