Add 'chess_board::InvalidError'
This commit is contained in:
parent
463b2a1a8f
commit
d3386bcb52
50
src/board/chess_board/error.rs
Normal file
50
src/board/chess_board/error.rs
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
/// A singular type for all errors that could happen during [ChessBoard::is_valid].
|
||||||
|
#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
|
pub enum InvalidError {
|
||||||
|
/// Too many pieces.
|
||||||
|
TooManyPieces,
|
||||||
|
/// Missing king.
|
||||||
|
MissingKing,
|
||||||
|
/// Pawns on the first/last rank.
|
||||||
|
InvalidPawnPosition,
|
||||||
|
/// Castling rights do not match up with the state of the board.
|
||||||
|
InvalidCastlingRights,
|
||||||
|
/// En-passant target square is not empty and behind an opponent's pawn.
|
||||||
|
InvalidEnPassant,
|
||||||
|
/// The two kings are next to each other.
|
||||||
|
NeighbouringKings,
|
||||||
|
/// The opponent is currently in check.
|
||||||
|
OpponentInCheck,
|
||||||
|
/// The piece-specific boards are overlapping.
|
||||||
|
OverlappingPieces,
|
||||||
|
/// The color-specific boards are overlapping.
|
||||||
|
OverlappingColors,
|
||||||
|
/// The pre-computed combined occupancy boards does not match the other boards.
|
||||||
|
ErroneousCombinedOccupancy,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl std::fmt::Display for InvalidError {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
let error_msg = match self {
|
||||||
|
Self::TooManyPieces => "Too many pieces.",
|
||||||
|
Self::MissingKing => "Missing king.",
|
||||||
|
Self::InvalidPawnPosition => "Pawns on the first/last rank.",
|
||||||
|
Self::InvalidCastlingRights => {
|
||||||
|
"Castling rights do not match up with the state of the board."
|
||||||
|
}
|
||||||
|
Self::InvalidEnPassant => {
|
||||||
|
"En-passant target square is not empty and behind an opponent's pawn."
|
||||||
|
}
|
||||||
|
Self::NeighbouringKings => "The two kings are next to each other.",
|
||||||
|
Self::OpponentInCheck => "The opponent is currently in check.",
|
||||||
|
Self::OverlappingPieces => "The piece-specific boards are overlapping.",
|
||||||
|
Self::OverlappingColors => "The color-specific boards are overlapping.",
|
||||||
|
Self::ErroneousCombinedOccupancy => {
|
||||||
|
"The pre-computed combined occupancy boards does not match the other boards."
|
||||||
|
}
|
||||||
|
};
|
||||||
|
write!(f, "{}", error_msg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl std::error::Error for InvalidError {}
|
|
@ -5,6 +5,9 @@ use crate::{
|
||||||
|
|
||||||
use super::{Bitboard, CastleRights, Color, File, Move, Piece, Rank, Square};
|
use super::{Bitboard, CastleRights, Color, File, Move, Piece, Rank, Square};
|
||||||
|
|
||||||
|
mod error;
|
||||||
|
pub use error::*;
|
||||||
|
|
||||||
/// Represent an on-going chess game.
|
/// Represent an on-going chess game.
|
||||||
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
|
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
|
||||||
pub struct ChessBoard {
|
pub struct ChessBoard {
|
||||||
|
|
Loading…
Reference in a new issue