// Eryn Wells use crate::Move; use chessfriend_board::{board::HalfMoveClock, Board, CastleRights}; use chessfriend_core::{Color, Piece, Square}; /// A record of a move made on a board. This struct contains all the information /// necessary to restore the board position to its state immediately before the /// move was made. #[derive(Clone, Debug, Eq, PartialEq)] pub struct MoveRecord { /// The color of the player who made the move pub color: Color, /// The move played pub ply: Move, /// The en passant square when the move was made pub en_passant_target: Option, /// Castling rights for all players when the move was made pub castling_rights: CastleRights, /// The half move clock when the move was made pub half_move_clock: HalfMoveClock, /// The piece captured by the move, if any pub captured_piece: Option, } impl MoveRecord { #[must_use] pub fn new(board: &Board, ply: Move, capture: Option) -> Self { Self { color: board.active_color(), ply, en_passant_target: board.en_passant_target(), castling_rights: board.castling_rights(), half_move_clock: board.half_move_clock, captured_piece: capture, } } }