diff --git a/board/src/board.rs b/board/src/board.rs index 3e866e0..63c0ad5 100644 --- a/board/src/board.rs +++ b/board/src/board.rs @@ -80,7 +80,7 @@ impl Board { piece: Piece, square: Square, strategy: PlacePieceStrategy, - ) -> Result<(), PlacePieceError> { + ) -> Result, PlacePieceError> { self.pieces.place(piece, square, strategy) } diff --git a/board/src/piece_sets.rs b/board/src/piece_sets.rs index b6de5c8..bb6d712 100644 --- a/board/src/piece_sets.rs +++ b/board/src/piece_sets.rs @@ -106,9 +106,11 @@ impl PieceSet { piece: Piece, square: Square, strategy: PlacePieceStrategy, - ) -> Result<(), PlacePieceError> { + ) -> Result, PlacePieceError> { + let existing_piece = self.mailbox.get(square); + if strategy == PlacePieceStrategy::PreserveExisting { - if let Some(piece) = self.mailbox.get(square) { + if let Some(piece) = existing_piece { return Err(PlacePieceError::ExisitingPiece { piece, square }); } } @@ -120,7 +122,7 @@ impl PieceSet { self.shape_occupancy[shape as usize].set(square); self.mailbox.set(piece, square); - Ok(()) + Ok(existing_piece) } pub(crate) fn remove(&mut self, square: Square) -> Option { diff --git a/position/src/position.rs b/position/src/position.rs index 4839095..8b08bce 100644 --- a/position/src/position.rs +++ b/position/src/position.rs @@ -59,7 +59,7 @@ impl Position { piece: Piece, square: Square, strategy: PlacePieceStrategy, - ) -> Result<(), PlacePieceError> { + ) -> Result, PlacePieceError> { self.board.place_piece(piece, square, strategy) }