use thiserror::Error;
#[derive(Error, Debug, PartialEq)]
pub enum Error {
#[error("Parse error at position {position}: {message}")]
Parse { position: usize, message: String },
#[error("Syntax error: {0}")]
Syntax(String),
#[error("Invalid escape sequence: {0}")]
InvalidEscape(String),
#[error("Array length mismatch: expected {expected}, found {found}")]
LengthMismatch { expected: usize, found: usize },
#[error("Delimiter mismatch: expected '{expected}', found '{found}'")]
DelimiterMismatch { expected: char, found: char },
#[error("Unterminated string")]
UnterminatedString,
#[error("Invalid number format: {0}")]
InvalidNumber(String),
#[error("Missing required field: {0}")]
MissingField(String),
#[error("Invalid header format: {0}")]
InvalidHeader(String),
#[error("IO error: {0}")]
Io(String),
#[error("Serialization error: {0}")]
Serialization(String),
#[error("Deserialization error: {0}")]
Deserialization(String),
}
impl Error {
pub fn parse(position: usize, message: impl Into<String>) -> Self {
Self::Parse {
position,
message: message.into(),
}
}
pub fn syntax(message: impl Into<String>) -> Self {
Self::Syntax(message.into())
}
}