use std::error::Error;
use std::fmt::{Display, Formatter};
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum PositionParsingError {
InvalidBoardStringLength { actual: usize, expected: usize },
InvalidCharacter { character: char, index: usize },
InvalidColumn { column: usize, index: usize },
InvalidFullColumnMove { column: usize, index: usize },
InvalidWinningMove { column: usize, index: usize },
}
impl Display for PositionParsingError {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
match self {
PositionParsingError::InvalidBoardStringLength { actual, expected } => {
write!(f, "invalid board string length: found {actual}, expected {expected}")
}
PositionParsingError::InvalidCharacter { character, index } => {
write!(f, "invalid character '{character}' at index {index}")
}
PositionParsingError::InvalidColumn { column, index } => {
write!(f, "invalid column {column} at index {index}")
}
PositionParsingError::InvalidFullColumnMove { column, index } => {
write!(f, "invalid move at index {index}: column {column} is full")
}
PositionParsingError::InvalidWinningMove { column, index } => {
write!(f, "invalid move at index {index}: column {column} results in a win")
}
}
}
}
impl Error for PositionParsingError {}