#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)]
#[error("text format parse error (line {line}:{col}): {kind}")]
#[non_exhaustive]
pub struct ParseError {
pub line: u32,
pub col: u32,
pub kind: ParseErrorKind,
}
impl ParseError {
#[inline]
pub(crate) fn new(line: u32, col: u32, kind: ParseErrorKind) -> Self {
Self { line, col, kind }
}
}
#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)]
#[non_exhaustive]
pub enum ParseErrorKind {
#[error("unexpected end of input")]
UnexpectedEof,
#[error("unexpected token, expected {expected}")]
UnexpectedToken {
expected: &'static str,
},
#[error("invalid number literal")]
InvalidNumber,
#[error("invalid string: {0}")]
InvalidString(&'static str),
#[error("invalid UTF-8 in string field")]
InvalidUtf8,
#[error("unknown field")]
UnknownField,
#[error("unknown enum value")]
UnknownEnumValue,
#[error("recursion limit exceeded")]
RecursionLimitExceeded,
#[error("mismatched message delimiters")]
DelimiterMismatch,
#[error("internal error (this is a buffa bug): {0}")]
Internal(&'static str),
}