#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum ChessSymbols {
NeutralChessKing,
NeutralChessQueen,
NeutralChessRook,
NeutralChessBishop,
NeutralChessKnight,
NeutralChessPawn,
WhiteChessKnightRotatedFortyDashFiveDegrees,
BlackChessKnightRotatedFortyDashFiveDegrees,
NeutralChessKnightRotatedFortyDashFiveDegrees,
WhiteChessKingRotatedNinetyDegrees,
WhiteChessQueenRotatedNinetyDegrees,
WhiteChessRookRotatedNinetyDegrees,
WhiteChessBishopRotatedNinetyDegrees,
WhiteChessKnightRotatedNinetyDegrees,
WhiteChessPawnRotatedNinetyDegrees,
BlackChessKingRotatedNinetyDegrees,
BlackChessQueenRotatedNinetyDegrees,
BlackChessRookRotatedNinetyDegrees,
BlackChessBishopRotatedNinetyDegrees,
BlackChessKnightRotatedNinetyDegrees,
BlackChessPawnRotatedNinetyDegrees,
NeutralChessKingRotatedNinetyDegrees,
NeutralChessQueenRotatedNinetyDegrees,
NeutralChessRookRotatedNinetyDegrees,
NeutralChessBishopRotatedNinetyDegrees,
NeutralChessKnightRotatedNinetyDegrees,
NeutralChessPawnRotatedNinetyDegrees,
WhiteChessKnightRotatedOneHundredThirtyDashFiveDegrees,
BlackChessKnightRotatedOneHundredThirtyDashFiveDegrees,
NeutralChessKnightRotatedOneHundredThirtyDashFiveDegrees,
WhiteChessTurnedKing,
WhiteChessTurnedQueen,
WhiteChessTurnedRook,
WhiteChessTurnedBishop,
WhiteChessTurnedKnight,
WhiteChessTurnedPawn,
BlackChessTurnedKing,
BlackChessTurnedQueen,
BlackChessTurnedRook,
BlackChessTurnedBishop,
BlackChessTurnedKnight,
BlackChessTurnedPawn,
NeutralChessTurnedKing,
NeutralChessTurnedQueen,
NeutralChessTurnedRook,
NeutralChessTurnedBishop,
NeutralChessTurnedKnight,
NeutralChessTurnedPawn,
WhiteChessKnightRotatedTwoHundredTwentyDashFiveDegrees,
BlackChessKnightRotatedTwoHundredTwentyDashFiveDegrees,
NeutralChessKnightRotatedTwoHundredTwentyDashFiveDegrees,
WhiteChessKingRotatedTwoHundredSeventyDegrees,
WhiteChessQueenRotatedTwoHundredSeventyDegrees,
WhiteChessRookRotatedTwoHundredSeventyDegrees,
WhiteChessBishopRotatedTwoHundredSeventyDegrees,
WhiteChessKnightRotatedTwoHundredSeventyDegrees,
WhiteChessPawnRotatedTwoHundredSeventyDegrees,
BlackChessKingRotatedTwoHundredSeventyDegrees,
BlackChessQueenRotatedTwoHundredSeventyDegrees,
BlackChessRookRotatedTwoHundredSeventyDegrees,
BlackChessBishopRotatedTwoHundredSeventyDegrees,
BlackChessKnightRotatedTwoHundredSeventyDegrees,
BlackChessPawnRotatedTwoHundredSeventyDegrees,
NeutralChessKingRotatedTwoHundredSeventyDegrees,
NeutralChessQueenRotatedTwoHundredSeventyDegrees,
NeutralChessRookRotatedTwoHundredSeventyDegrees,
NeutralChessBishopRotatedTwoHundredSeventyDegrees,
NeutralChessKnightRotatedTwoHundredSeventyDegrees,
NeutralChessPawnRotatedTwoHundredSeventyDegrees,
WhiteChessKnightRotatedThreeHundredFifteenDegrees,
BlackChessKnightRotatedThreeHundredFifteenDegrees,
NeutralChessKnightRotatedThreeHundredFifteenDegrees,
WhiteChessEquihopper,
BlackChessEquihopper,
NeutralChessEquihopper,
WhiteChessEquihopperRotatedNinetyDegrees,
BlackChessEquihopperRotatedNinetyDegrees,
NeutralChessEquihopperRotatedNinetyDegrees,
WhiteChessKnightDashQueen,
WhiteChessKnightDashRook,
WhiteChessKnightDashBishop,
BlackChessKnightDashQueen,
BlackChessKnightDashRook,
BlackChessKnightDashBishop,
XiangqiRedGeneral,
XiangqiRedMandarin,
XiangqiRedElephant,
XiangqiRedHorse,
XiangqiRedChariot,
XiangqiRedCannon,
XiangqiRedSoldier,
XiangqiBlackGeneral,
XiangqiBlackMandarin,
XiangqiBlackElephant,
XiangqiBlackHorse,
XiangqiBlackChariot,
XiangqiBlackCannon,
XiangqiBlackSoldier,
}
impl Into<char> for ChessSymbols {
fn into(self) -> char {
match self {
ChessSymbols::NeutralChessKing => '🨀',
ChessSymbols::NeutralChessQueen => '🨁',
ChessSymbols::NeutralChessRook => '🨂',
ChessSymbols::NeutralChessBishop => '🨃',
ChessSymbols::NeutralChessKnight => '🨄',
ChessSymbols::NeutralChessPawn => '🨅',
ChessSymbols::WhiteChessKnightRotatedFortyDashFiveDegrees => '🨆',
ChessSymbols::BlackChessKnightRotatedFortyDashFiveDegrees => '🨇',
ChessSymbols::NeutralChessKnightRotatedFortyDashFiveDegrees => '🨈',
ChessSymbols::WhiteChessKingRotatedNinetyDegrees => '🨉',
ChessSymbols::WhiteChessQueenRotatedNinetyDegrees => '🨊',
ChessSymbols::WhiteChessRookRotatedNinetyDegrees => '🨋',
ChessSymbols::WhiteChessBishopRotatedNinetyDegrees => '🨌',
ChessSymbols::WhiteChessKnightRotatedNinetyDegrees => '🨍',
ChessSymbols::WhiteChessPawnRotatedNinetyDegrees => '🨎',
ChessSymbols::BlackChessKingRotatedNinetyDegrees => '🨏',
ChessSymbols::BlackChessQueenRotatedNinetyDegrees => '🨐',
ChessSymbols::BlackChessRookRotatedNinetyDegrees => '🨑',
ChessSymbols::BlackChessBishopRotatedNinetyDegrees => '🨒',
ChessSymbols::BlackChessKnightRotatedNinetyDegrees => '🨓',
ChessSymbols::BlackChessPawnRotatedNinetyDegrees => '🨔',
ChessSymbols::NeutralChessKingRotatedNinetyDegrees => '🨕',
ChessSymbols::NeutralChessQueenRotatedNinetyDegrees => '🨖',
ChessSymbols::NeutralChessRookRotatedNinetyDegrees => '🨗',
ChessSymbols::NeutralChessBishopRotatedNinetyDegrees => '🨘',
ChessSymbols::NeutralChessKnightRotatedNinetyDegrees => '🨙',
ChessSymbols::NeutralChessPawnRotatedNinetyDegrees => '🨚',
ChessSymbols::WhiteChessKnightRotatedOneHundredThirtyDashFiveDegrees => '🨛',
ChessSymbols::BlackChessKnightRotatedOneHundredThirtyDashFiveDegrees => '🨜',
ChessSymbols::NeutralChessKnightRotatedOneHundredThirtyDashFiveDegrees => '🨝',
ChessSymbols::WhiteChessTurnedKing => '🨞',
ChessSymbols::WhiteChessTurnedQueen => '🨟',
ChessSymbols::WhiteChessTurnedRook => '🨠',
ChessSymbols::WhiteChessTurnedBishop => '🨡',
ChessSymbols::WhiteChessTurnedKnight => '🨢',
ChessSymbols::WhiteChessTurnedPawn => '🨣',
ChessSymbols::BlackChessTurnedKing => '🨤',
ChessSymbols::BlackChessTurnedQueen => '🨥',
ChessSymbols::BlackChessTurnedRook => '🨦',
ChessSymbols::BlackChessTurnedBishop => '🨧',
ChessSymbols::BlackChessTurnedKnight => '🨨',
ChessSymbols::BlackChessTurnedPawn => '🨩',
ChessSymbols::NeutralChessTurnedKing => '🨪',
ChessSymbols::NeutralChessTurnedQueen => '🨫',
ChessSymbols::NeutralChessTurnedRook => '🨬',
ChessSymbols::NeutralChessTurnedBishop => '🨭',
ChessSymbols::NeutralChessTurnedKnight => '🨮',
ChessSymbols::NeutralChessTurnedPawn => '🨯',
ChessSymbols::WhiteChessKnightRotatedTwoHundredTwentyDashFiveDegrees => '🨰',
ChessSymbols::BlackChessKnightRotatedTwoHundredTwentyDashFiveDegrees => '🨱',
ChessSymbols::NeutralChessKnightRotatedTwoHundredTwentyDashFiveDegrees => '🨲',
ChessSymbols::WhiteChessKingRotatedTwoHundredSeventyDegrees => '🨳',
ChessSymbols::WhiteChessQueenRotatedTwoHundredSeventyDegrees => '🨴',
ChessSymbols::WhiteChessRookRotatedTwoHundredSeventyDegrees => '🨵',
ChessSymbols::WhiteChessBishopRotatedTwoHundredSeventyDegrees => '🨶',
ChessSymbols::WhiteChessKnightRotatedTwoHundredSeventyDegrees => '🨷',
ChessSymbols::WhiteChessPawnRotatedTwoHundredSeventyDegrees => '🨸',
ChessSymbols::BlackChessKingRotatedTwoHundredSeventyDegrees => '🨹',
ChessSymbols::BlackChessQueenRotatedTwoHundredSeventyDegrees => '🨺',
ChessSymbols::BlackChessRookRotatedTwoHundredSeventyDegrees => '🨻',
ChessSymbols::BlackChessBishopRotatedTwoHundredSeventyDegrees => '🨼',
ChessSymbols::BlackChessKnightRotatedTwoHundredSeventyDegrees => '🨽',
ChessSymbols::BlackChessPawnRotatedTwoHundredSeventyDegrees => '🨾',
ChessSymbols::NeutralChessKingRotatedTwoHundredSeventyDegrees => '🨿',
ChessSymbols::NeutralChessQueenRotatedTwoHundredSeventyDegrees => '🩀',
ChessSymbols::NeutralChessRookRotatedTwoHundredSeventyDegrees => '🩁',
ChessSymbols::NeutralChessBishopRotatedTwoHundredSeventyDegrees => '🩂',
ChessSymbols::NeutralChessKnightRotatedTwoHundredSeventyDegrees => '🩃',
ChessSymbols::NeutralChessPawnRotatedTwoHundredSeventyDegrees => '🩄',
ChessSymbols::WhiteChessKnightRotatedThreeHundredFifteenDegrees => '🩅',
ChessSymbols::BlackChessKnightRotatedThreeHundredFifteenDegrees => '🩆',
ChessSymbols::NeutralChessKnightRotatedThreeHundredFifteenDegrees => '🩇',
ChessSymbols::WhiteChessEquihopper => '🩈',
ChessSymbols::BlackChessEquihopper => '🩉',
ChessSymbols::NeutralChessEquihopper => '🩊',
ChessSymbols::WhiteChessEquihopperRotatedNinetyDegrees => '🩋',
ChessSymbols::BlackChessEquihopperRotatedNinetyDegrees => '🩌',
ChessSymbols::NeutralChessEquihopperRotatedNinetyDegrees => '🩍',
ChessSymbols::WhiteChessKnightDashQueen => '🩎',
ChessSymbols::WhiteChessKnightDashRook => '🩏',
ChessSymbols::WhiteChessKnightDashBishop => '🩐',
ChessSymbols::BlackChessKnightDashQueen => '🩑',
ChessSymbols::BlackChessKnightDashRook => '🩒',
ChessSymbols::BlackChessKnightDashBishop => '🩓',
ChessSymbols::XiangqiRedGeneral => '🩠',
ChessSymbols::XiangqiRedMandarin => '🩡',
ChessSymbols::XiangqiRedElephant => '🩢',
ChessSymbols::XiangqiRedHorse => '🩣',
ChessSymbols::XiangqiRedChariot => '🩤',
ChessSymbols::XiangqiRedCannon => '🩥',
ChessSymbols::XiangqiRedSoldier => '🩦',
ChessSymbols::XiangqiBlackGeneral => '🩧',
ChessSymbols::XiangqiBlackMandarin => '🩨',
ChessSymbols::XiangqiBlackElephant => '🩩',
ChessSymbols::XiangqiBlackHorse => '🩪',
ChessSymbols::XiangqiBlackChariot => '🩫',
ChessSymbols::XiangqiBlackCannon => '🩬',
ChessSymbols::XiangqiBlackSoldier => '🩭',
}
}
}
impl std::convert::TryFrom<char> for ChessSymbols {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'🨀' => Ok(ChessSymbols::NeutralChessKing),
'🨁' => Ok(ChessSymbols::NeutralChessQueen),
'🨂' => Ok(ChessSymbols::NeutralChessRook),
'🨃' => Ok(ChessSymbols::NeutralChessBishop),
'🨄' => Ok(ChessSymbols::NeutralChessKnight),
'🨅' => Ok(ChessSymbols::NeutralChessPawn),
'🨆' => Ok(ChessSymbols::WhiteChessKnightRotatedFortyDashFiveDegrees),
'🨇' => Ok(ChessSymbols::BlackChessKnightRotatedFortyDashFiveDegrees),
'🨈' => Ok(ChessSymbols::NeutralChessKnightRotatedFortyDashFiveDegrees),
'🨉' => Ok(ChessSymbols::WhiteChessKingRotatedNinetyDegrees),
'🨊' => Ok(ChessSymbols::WhiteChessQueenRotatedNinetyDegrees),
'🨋' => Ok(ChessSymbols::WhiteChessRookRotatedNinetyDegrees),
'🨌' => Ok(ChessSymbols::WhiteChessBishopRotatedNinetyDegrees),
'🨍' => Ok(ChessSymbols::WhiteChessKnightRotatedNinetyDegrees),
'🨎' => Ok(ChessSymbols::WhiteChessPawnRotatedNinetyDegrees),
'🨏' => Ok(ChessSymbols::BlackChessKingRotatedNinetyDegrees),
'🨐' => Ok(ChessSymbols::BlackChessQueenRotatedNinetyDegrees),
'🨑' => Ok(ChessSymbols::BlackChessRookRotatedNinetyDegrees),
'🨒' => Ok(ChessSymbols::BlackChessBishopRotatedNinetyDegrees),
'🨓' => Ok(ChessSymbols::BlackChessKnightRotatedNinetyDegrees),
'🨔' => Ok(ChessSymbols::BlackChessPawnRotatedNinetyDegrees),
'🨕' => Ok(ChessSymbols::NeutralChessKingRotatedNinetyDegrees),
'🨖' => Ok(ChessSymbols::NeutralChessQueenRotatedNinetyDegrees),
'🨗' => Ok(ChessSymbols::NeutralChessRookRotatedNinetyDegrees),
'🨘' => Ok(ChessSymbols::NeutralChessBishopRotatedNinetyDegrees),
'🨙' => Ok(ChessSymbols::NeutralChessKnightRotatedNinetyDegrees),
'🨚' => Ok(ChessSymbols::NeutralChessPawnRotatedNinetyDegrees),
'🨛' => Ok(ChessSymbols::WhiteChessKnightRotatedOneHundredThirtyDashFiveDegrees),
'🨜' => Ok(ChessSymbols::BlackChessKnightRotatedOneHundredThirtyDashFiveDegrees),
'🨝' => Ok(ChessSymbols::NeutralChessKnightRotatedOneHundredThirtyDashFiveDegrees),
'🨞' => Ok(ChessSymbols::WhiteChessTurnedKing),
'🨟' => Ok(ChessSymbols::WhiteChessTurnedQueen),
'🨠' => Ok(ChessSymbols::WhiteChessTurnedRook),
'🨡' => Ok(ChessSymbols::WhiteChessTurnedBishop),
'🨢' => Ok(ChessSymbols::WhiteChessTurnedKnight),
'🨣' => Ok(ChessSymbols::WhiteChessTurnedPawn),
'🨤' => Ok(ChessSymbols::BlackChessTurnedKing),
'🨥' => Ok(ChessSymbols::BlackChessTurnedQueen),
'🨦' => Ok(ChessSymbols::BlackChessTurnedRook),
'🨧' => Ok(ChessSymbols::BlackChessTurnedBishop),
'🨨' => Ok(ChessSymbols::BlackChessTurnedKnight),
'🨩' => Ok(ChessSymbols::BlackChessTurnedPawn),
'🨪' => Ok(ChessSymbols::NeutralChessTurnedKing),
'🨫' => Ok(ChessSymbols::NeutralChessTurnedQueen),
'🨬' => Ok(ChessSymbols::NeutralChessTurnedRook),
'🨭' => Ok(ChessSymbols::NeutralChessTurnedBishop),
'🨮' => Ok(ChessSymbols::NeutralChessTurnedKnight),
'🨯' => Ok(ChessSymbols::NeutralChessTurnedPawn),
'🨰' => Ok(ChessSymbols::WhiteChessKnightRotatedTwoHundredTwentyDashFiveDegrees),
'🨱' => Ok(ChessSymbols::BlackChessKnightRotatedTwoHundredTwentyDashFiveDegrees),
'🨲' => Ok(ChessSymbols::NeutralChessKnightRotatedTwoHundredTwentyDashFiveDegrees),
'🨳' => Ok(ChessSymbols::WhiteChessKingRotatedTwoHundredSeventyDegrees),
'🨴' => Ok(ChessSymbols::WhiteChessQueenRotatedTwoHundredSeventyDegrees),
'🨵' => Ok(ChessSymbols::WhiteChessRookRotatedTwoHundredSeventyDegrees),
'🨶' => Ok(ChessSymbols::WhiteChessBishopRotatedTwoHundredSeventyDegrees),
'🨷' => Ok(ChessSymbols::WhiteChessKnightRotatedTwoHundredSeventyDegrees),
'🨸' => Ok(ChessSymbols::WhiteChessPawnRotatedTwoHundredSeventyDegrees),
'🨹' => Ok(ChessSymbols::BlackChessKingRotatedTwoHundredSeventyDegrees),
'🨺' => Ok(ChessSymbols::BlackChessQueenRotatedTwoHundredSeventyDegrees),
'🨻' => Ok(ChessSymbols::BlackChessRookRotatedTwoHundredSeventyDegrees),
'🨼' => Ok(ChessSymbols::BlackChessBishopRotatedTwoHundredSeventyDegrees),
'🨽' => Ok(ChessSymbols::BlackChessKnightRotatedTwoHundredSeventyDegrees),
'🨾' => Ok(ChessSymbols::BlackChessPawnRotatedTwoHundredSeventyDegrees),
'🨿' => Ok(ChessSymbols::NeutralChessKingRotatedTwoHundredSeventyDegrees),
'🩀' => Ok(ChessSymbols::NeutralChessQueenRotatedTwoHundredSeventyDegrees),
'🩁' => Ok(ChessSymbols::NeutralChessRookRotatedTwoHundredSeventyDegrees),
'🩂' => Ok(ChessSymbols::NeutralChessBishopRotatedTwoHundredSeventyDegrees),
'🩃' => Ok(ChessSymbols::NeutralChessKnightRotatedTwoHundredSeventyDegrees),
'🩄' => Ok(ChessSymbols::NeutralChessPawnRotatedTwoHundredSeventyDegrees),
'🩅' => Ok(ChessSymbols::WhiteChessKnightRotatedThreeHundredFifteenDegrees),
'🩆' => Ok(ChessSymbols::BlackChessKnightRotatedThreeHundredFifteenDegrees),
'🩇' => Ok(ChessSymbols::NeutralChessKnightRotatedThreeHundredFifteenDegrees),
'🩈' => Ok(ChessSymbols::WhiteChessEquihopper),
'🩉' => Ok(ChessSymbols::BlackChessEquihopper),
'🩊' => Ok(ChessSymbols::NeutralChessEquihopper),
'🩋' => Ok(ChessSymbols::WhiteChessEquihopperRotatedNinetyDegrees),
'🩌' => Ok(ChessSymbols::BlackChessEquihopperRotatedNinetyDegrees),
'🩍' => Ok(ChessSymbols::NeutralChessEquihopperRotatedNinetyDegrees),
'🩎' => Ok(ChessSymbols::WhiteChessKnightDashQueen),
'🩏' => Ok(ChessSymbols::WhiteChessKnightDashRook),
'🩐' => Ok(ChessSymbols::WhiteChessKnightDashBishop),
'🩑' => Ok(ChessSymbols::BlackChessKnightDashQueen),
'🩒' => Ok(ChessSymbols::BlackChessKnightDashRook),
'🩓' => Ok(ChessSymbols::BlackChessKnightDashBishop),
'🩠' => Ok(ChessSymbols::XiangqiRedGeneral),
'🩡' => Ok(ChessSymbols::XiangqiRedMandarin),
'🩢' => Ok(ChessSymbols::XiangqiRedElephant),
'🩣' => Ok(ChessSymbols::XiangqiRedHorse),
'🩤' => Ok(ChessSymbols::XiangqiRedChariot),
'🩥' => Ok(ChessSymbols::XiangqiRedCannon),
'🩦' => Ok(ChessSymbols::XiangqiRedSoldier),
'🩧' => Ok(ChessSymbols::XiangqiBlackGeneral),
'🩨' => Ok(ChessSymbols::XiangqiBlackMandarin),
'🩩' => Ok(ChessSymbols::XiangqiBlackElephant),
'🩪' => Ok(ChessSymbols::XiangqiBlackHorse),
'🩫' => Ok(ChessSymbols::XiangqiBlackChariot),
'🩬' => Ok(ChessSymbols::XiangqiBlackCannon),
'🩭' => Ok(ChessSymbols::XiangqiBlackSoldier),
_ => Err(()),
}
}
}
impl Into<u32> for ChessSymbols {
fn into(self) -> u32 {
let c: char = self.into();
let hex = c
.escape_unicode()
.to_string()
.replace("\\u{", "")
.replace("}", "");
u32::from_str_radix(&hex, 16).unwrap()
}
}
impl std::convert::TryFrom<u32> for ChessSymbols {
type Error = ();
fn try_from(u: u32) -> Result<Self, Self::Error> {
if let Ok(c) = char::try_from(u) {
Self::try_from(c)
} else {
Err(())
}
}
}
impl Iterator for ChessSymbols {
type Item = Self;
fn next(&mut self) -> Option<Self> {
let index: u32 = (*self).into();
use std::convert::TryFrom;
Self::try_from(index + 1).ok()
}
}
impl ChessSymbols {
pub fn new() -> Self {
ChessSymbols::NeutralChessKing
}
pub fn name(&self) -> String {
let s = std::format!("ChessSymbols{:#?}", self);
string_morph::to_sentence_case(&s)
}
}