use crate::core::Move10;
use crate::board::PieceMapping;
use crate::board::Occupied;
use crate::board::CapturedBits;
use crate::rules::checkmate::{Color, GameResult};
#[derive(Debug)]
pub enum MoveError {
IllegalMove,
OutOfBounds,
NotYourTurn,
KingInCheckAfterMove,
}
pub trait ChessEngine {
fn current_mapping(&self) -> &PieceMapping;
fn current_occupied(&self) -> Occupied;
fn current_captured_bits(&self) -> CapturedBits;
fn side_to_move(&self) -> Color;
fn en_passant_target(&self) -> Option<u8>;
fn ply(&self) -> usize;
fn game_result(&self) -> GameResult;
fn read_ply(&self, i: usize) -> Move10;
fn generate_pseudo_legal_moves(&self) -> Vec<Move10>;
fn push_move(&mut self, mv: Move10) -> Result<(), MoveError>;
fn pop_move(&mut self);
fn reset(&mut self);
}