From 85c1a395c4547ae9fcdb4454085e2ec8c2480350 Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Wed, 21 May 2025 08:26:34 -0700 Subject: [PATCH] [position] Streamline the implementation of castling_{king,rook} Instead of using .and_then with an if/else, use .filter and pass the predicate. Saves a few lines. --- position/src/position/castle.rs | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/position/src/position/castle.rs b/position/src/position/castle.rs index 717cc14..cdf4900 100644 --- a/position/src/position/castle.rs +++ b/position/src/position/castle.rs @@ -69,23 +69,15 @@ impl Position { } pub(crate) fn castling_king(&self, square: Square) -> Option { - self.get_piece(square).and_then(|piece| { - if piece.color == self.board.active_color && piece.is_king() { - Some(piece) - } else { - None - } - }) + let active_color = self.board.active_color; + self.get_piece(square) + .filter(|piece| piece.color == active_color && piece.is_king()) } pub(crate) fn castling_rook(&self, square: Square) -> Option { - self.get_piece(square).and_then(|piece| { - if piece.color == self.board.active_color && piece.is_rook() { - Some(piece) - } else { - None - } - }) + let active_color = self.board.active_color; + self.get_piece(square) + .filter(|piece| piece.color == active_color && piece.is_rook()) } }