use std::fmt;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub enum ErrorKind {
EmptyInput,
NoReleases,
MalformedHeading,
UnsupportedStructure,
ResourceLimit,
MalformedInput,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[non_exhaustive]
pub struct ParseError {
pub kind: ErrorKind,
pub line: Option<usize>,
pub message: String,
}
impl ParseError {
#[must_use]
pub fn new(kind: ErrorKind, line: Option<usize>, message: impl Into<String>) -> Self {
Self {
kind,
line,
message: message.into(),
}
}
}
impl fmt::Display for ParseError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
if let Some(line) = self.line {
write!(f, "line {line}: ")?;
}
f.write_str(&self.message)
}
}
impl std::error::Error for ParseError {}