1use thiserror::Error;
2
3#[derive(Error, Debug)]
5pub enum GameError {
6 #[error("Invalid move: {0}")]
7 InvalidMove(String),
8
9 #[error("Game is already over")]
10 GameOver,
11
12 #[error("Invalid board position: ({row}, {col})")]
13 InvalidPosition { row: usize, col: usize },
14
15 #[error("Invalid board size: {size} (must be > 0)")]
16 InvalidBoardSize { size: usize },
17
18 #[error("No undo available")]
19 NoUndoAvailable,
20
21 #[error("Serialization error: {0}")]
22 Serialization(String),
23
24 #[error("Random number generation error: {0}")]
25 RngError(String),
26
27 #[error("Invalid operation: {0}")]
28 InvalidOperation(String),
29}
30
31pub type GameResult<T> = Result<T, GameError>;