// Eryn Wells use chessfriend_core::{Piece, PlacedPiece, Square}; use std::iter::FromIterator; #[derive(Clone, Debug, Eq, Hash, PartialEq)] pub(super) struct Mailbox([Option; Square::NUM]); impl Mailbox { pub(super) fn new() -> Self { Self::default() } pub(super) fn get(&self, square: Square) -> Option { self.0[square as usize] } pub(super) fn set(&mut self, square: Square, piece: Piece) { self.0[square as usize] = Some(piece); } pub(super) fn clear(&mut self, square: Square) { self.0[square as usize] = None; } } impl Default for Mailbox { fn default() -> Self { Self([None; Square::NUM]) } } impl From<[Option; Square::NUM]> for Mailbox { fn from(value: [Option; Square::NUM]) -> Self { Mailbox(value) } } impl FromIterator for Mailbox { fn from_iter>(iter: T) -> Self { let mut mailbox = Self::new(); for placed_piece in iter { mailbox.set(placed_piece.square(), placed_piece.piece()); } mailbox } } impl FromIterator<(Square, Piece)> for Mailbox { fn from_iter>(iter: T) -> Self { let mut mailbox = Self::new(); for (square, piece) in iter { mailbox.set(square, piece); } mailbox } }