// Copyright (C) 2021-2022 Soni L. // SPDX-License-Identifier: MIT OR Apache-2.0 //! // #[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, }