dioxus_chessboard/
lib.rs

1pub(crate) mod files;
2pub(crate) mod historical_board;
3pub(crate) mod move_builder;
4pub(crate) mod piece;
5pub(crate) mod promotion;
6pub(crate) mod ranks;
7
8mod chessboard;
9pub use chessboard::{Action, Chessboard, ChessboardProps, PlayerColor};
10mod pieces;
11mod square;
12
13pub use pieces::PieceSet;
14
15use crate::historical_board::HistoricalBoard;
16use crate::move_builder::{MoveAction, MoveBuilder};
17use dioxus::prelude::{Readable, Signal, Writable};
18use owlchess::board::PrettyStyle;
19use tracing::debug;
20
21fn finalize(move_builder: &mut Signal<MoveBuilder>, board: &mut Signal<HistoricalBoard>) {
22    // Try finalizing the move builder and apply the move.
23    let finalized = {
24        let board = board.read();
25        move_builder.write().finalize(&board)
26    };
27
28    match finalized {
29        MoveAction::Apply(m) => {
30            debug!("Applying the move {m:?}");
31            board.write().make_move(m).expect("Move must be valid");
32            debug!("New board\n{}", board.read().pretty(PrettyStyle::Utf8));
33        }
34        MoveAction::Revert => {
35            debug!("Reverting the last move ");
36            let m = board.write().revert_last_move();
37            debug!(
38                "Move {m:?} has been reverted \nNew board\n{}\n",
39                board.read().pretty(PrettyStyle::Utf8)
40            );
41        }
42        MoveAction::None => {}
43    }
44}