use super::constants::*;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Piece {
pub piece_type: PieceType,
pub color: Color,
}
#[derive(PartialEq, Eq, Ord, PartialOrd, Copy, Clone, Debug, Hash)]
#[repr(u8)]
pub enum PieceType {
PAWN = 1,
KNIGHT = 2,
BISHOP = 4,
ROOK = 8,
QUEEN = 16,
KING = 32,
}
impl PieceType {
pub fn to_value(&self) -> u8 {
*self as u8
}
pub fn from_value(value: u8) -> Option<PieceType> {
match value {
1 => Some(PieceType::PAWN),
2 => Some(PieceType::KNIGHT),
4 => Some(PieceType::BISHOP),
8 => Some(PieceType::ROOK),
16 => Some(PieceType::QUEEN),
32 => Some(PieceType::KING),
_ => None,
}
}
pub fn from_string(value: &str) -> Option<PieceType> {
match value.to_lowercase().as_str() {
"p" => Some(PieceType::PAWN),
"n" => Some(PieceType::KNIGHT),
"b" => Some(PieceType::BISHOP),
"r" => Some(PieceType::ROOK),
"q" => Some(PieceType::QUEEN),
"k" => Some(PieceType::KING),
_ => None,
}
}
}