summary refs log blame commit diff stats
path: root/src/errors.rs
blob: e98483f72424fc45e235b3ee9dca0e061a8cbe60 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

















                                                                              




























                                                                          
 
                                       
                       
                     
                                                 
                  
                                                  
                    

                                                                  

                                                                              


                                                                              

         
/*
 * This file is part of Datafu
 * Copyright (C) 2021  Soni L.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

/// 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, Debug)]
pub enum MatchError {
    /// Returned if the pattern nests too deeply.
    StackOverflow,
    /// Returned if the pattern rejects the input.
    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
    /// ValidationError, or as a bug in the pattern, at the user's discretion.
    UnsupportedOperation,
    /// Returned if an unspecified non-critical error occurred.
    Other
}