friendly_chess/chess/
piece.rs1use super::constants::*;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
4pub struct Piece {
5 pub piece_type: PieceType,
6 pub color: Color,
7}
8
9#[derive(PartialEq, Eq, Ord, PartialOrd, Copy, Clone, Debug, Hash)]
10#[repr(u8)]
11pub enum PieceType {
12 PAWN = 1,
14 KNIGHT = 2,
15 BISHOP = 4,
16 ROOK = 8,
17 QUEEN = 16,
18 KING = 32,
19}
20
21impl PieceType {
22 pub fn to_value(&self) -> u8 {
24 *self as u8
25 }
26
27 pub fn from_value(value: u8) -> Option<PieceType> {
29 match value {
30 1 => Some(PieceType::PAWN),
32 2 => Some(PieceType::KNIGHT),
33 4 => Some(PieceType::BISHOP),
34 8 => Some(PieceType::ROOK),
35 16 => Some(PieceType::QUEEN),
36 32 => Some(PieceType::KING),
37 _ => None,
38 }
39 }
40
41 pub fn from_string(value: &str) -> Option<PieceType> {
42 match value.to_lowercase().as_str() {
43 "p" => Some(PieceType::PAWN),
44 "n" => Some(PieceType::KNIGHT),
45 "b" => Some(PieceType::BISHOP),
46 "r" => Some(PieceType::ROOK),
47 "q" => Some(PieceType::QUEEN),
48 "k" => Some(PieceType::KING),
49 _ => None,
50 }
51 }
52
53 pub fn from_string_verbose(value: &str) -> Option<PieceType> {
54 match value.to_lowercase().as_str() {
55 "pawn" => Some(PieceType::PAWN),
56 "knight" => Some(PieceType::KNIGHT),
57 "bishop" => Some(PieceType::BISHOP),
58 "rook" => Some(PieceType::ROOK),
59 "queen" => Some(PieceType::QUEEN),
60 "king" => Some(PieceType::KING),
61 _ => None,
62 }
63 }
64
65 pub fn to_string(&self) -> Option<&str> {
66 use PieceType::*;
67
68 Some(match self {
69 PAWN => "p",
70 KNIGHT=> "n",
71 BISHOP=> "b",
72 ROOK => "r",
73 QUEEN => "q",
74 KING=> "k",
75 })
76 }
77
78 pub fn to_string_verbose(&self) -> Option<&str> {
79 use PieceType::*;
80
81 Some(match self {
82 PAWN => "pawn",
83 KNIGHT=> "knight",
84 BISHOP=> "bishop",
85 ROOK => "rook",
86 QUEEN => "queen",
87 KING=> "king",
88 })
89 }
90}