use crate::span::Span; use std::fmt; /// An error produced during parsing. #[derive(Debug, Clone, PartialEq)] pub struct ParseError { pub message: String, pub span: Span, } impl ParseError { pub fn new(message: impl Into, span: Span) -> Self { Self { message: message.into(), span, } } } impl fmt::Display for ParseError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!( f, "parse error at {}..{}: {}", self.span.start, self.span.end, self.message ) } } impl std::error::Error for ParseError {}