use super::side::Side;
use chess_notation_parser::Square;
#[derive(Hash, Copy, Clone)]
pub struct Enpassant {
pub pawn_src: Square,
pub capture_pos: Square,
}
impl Enpassant {
pub fn try_from(src: Square, dst: Square, side: Side) -> Option<Self> {
let calc_y_dir = |steps: i8| match side {
Side::Black => -steps,
Side::White => steps,
};
let y_dir = calc_y_dir(2);
if src.get_relative_neighbor(0, y_dir).unwrap_or(src) != dst {
return None;
}
let y_dir = calc_y_dir(1);
Some(Enpassant {
pawn_src: dst,
capture_pos: src.get_relative_neighbor(0, y_dir).unwrap(),
})
}
}