chessfriend/moves/src/record.rs
Eryn Wells 404212363e [board, moves] Make Board::castling_rights and Board::en_passant_target private
Make the struct fields private and export getters and various setters for
manipulating the data.

Update all the references to these fields to use the getters and setters instead.
2025-06-03 20:25:53 -07:00

43 lines
1.3 KiB
Rust

// Eryn Wells <eryn@erynwells.me>
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<Square>,
/// 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<Piece>,
}
impl MoveRecord {
#[must_use]
pub fn new(board: &Board, ply: Move, capture: Option<Piece>) -> 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,
}
}
}