/*
* 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
}