// 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)] #[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 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 }