rust_fish_chess_engine 0.1.0

A chess engine and functionality built in Rust. Built for the intention of incorporating it into my Svelte chess project through WASM.
Documentation
use crate::Piece;
use super::moves::{check::{all_possible_moves, king_is_checked}, king::CastleState, move_piece, unmove_piece, Move};


pub fn is_checkmate(
    board: &mut Vec<Vec<Option<Piece>>>,
    whites_turn: bool,
    previous_move: &Option<Move>,
    castle_state: &mut CastleState
) -> Result<bool, String> {
    if !king_is_checked(board, whites_turn, previous_move, castle_state)? {
        return Ok(false)
    }

    return all_moves_result_in_check(board, whites_turn, previous_move, castle_state)
}

pub fn is_stalemate(
    board: &mut Vec<Vec<Option<Piece>>>,
    whites_turn: bool,
    previous_move: &Option<Move>,
    castle_state: &mut CastleState
) -> Result<bool, String> {
    if king_is_checked(board, whites_turn, previous_move, castle_state)? {
        return Ok(false)
    }

    return all_moves_result_in_check(board, whites_turn, previous_move, castle_state)
}

fn all_moves_result_in_check(
    board: &mut Vec<Vec<Option<Piece>>>,
    whites_turn: bool,
    previous_move: &Option<Move>,
    castle_state: &mut CastleState
) -> Result<bool, String> {
    let possible_moves = all_possible_moves(board, whites_turn, previous_move, castle_state)?;
    for m in possible_moves {
        let taken_piece = move_piece(&m, board);
        let check = king_is_checked(board, whites_turn, previous_move, castle_state)?;
        unmove_piece(&m, board, taken_piece);
        if !check {
            return Ok(false)
        }
    }

    return Ok(true)
}