#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum PlayingCards {
PlayingCardBack,
PlayingCardAceOfSpades,
PlayingCardTwoOfSpades,
PlayingCardThreeOfSpades,
PlayingCardFourOfSpades,
PlayingCardFiveOfSpades,
PlayingCardSixOfSpades,
PlayingCardSevenOfSpades,
PlayingCardEightOfSpades,
PlayingCardNineOfSpades,
PlayingCardTenOfSpades,
PlayingCardJackOfSpades,
PlayingCardKnightOfSpades,
PlayingCardQueenOfSpades,
PlayingCardKingOfSpades,
PlayingCardAceOfHearts,
PlayingCardTwoOfHearts,
PlayingCardThreeOfHearts,
PlayingCardFourOfHearts,
PlayingCardFiveOfHearts,
PlayingCardSixOfHearts,
PlayingCardSevenOfHearts,
PlayingCardEightOfHearts,
PlayingCardNineOfHearts,
PlayingCardTenOfHearts,
PlayingCardJackOfHearts,
PlayingCardKnightOfHearts,
PlayingCardQueenOfHearts,
PlayingCardKingOfHearts,
PlayingCardRedJoker,
PlayingCardAceOfDiamonds,
PlayingCardTwoOfDiamonds,
PlayingCardThreeOfDiamonds,
PlayingCardFourOfDiamonds,
PlayingCardFiveOfDiamonds,
PlayingCardSixOfDiamonds,
PlayingCardSevenOfDiamonds,
PlayingCardEightOfDiamonds,
PlayingCardNineOfDiamonds,
PlayingCardTenOfDiamonds,
PlayingCardJackOfDiamonds,
PlayingCardKnightOfDiamonds,
PlayingCardQueenOfDiamonds,
PlayingCardKingOfDiamonds,
PlayingCardBlackJoker,
PlayingCardAceOfClubs,
PlayingCardTwoOfClubs,
PlayingCardThreeOfClubs,
PlayingCardFourOfClubs,
PlayingCardFiveOfClubs,
PlayingCardSixOfClubs,
PlayingCardSevenOfClubs,
PlayingCardEightOfClubs,
PlayingCardNineOfClubs,
PlayingCardTenOfClubs,
PlayingCardJackOfClubs,
PlayingCardKnightOfClubs,
PlayingCardQueenOfClubs,
PlayingCardKingOfClubs,
PlayingCardWhiteJoker,
PlayingCardFool,
PlayingCardTrumpDash1,
PlayingCardTrumpDash2,
PlayingCardTrumpDash3,
PlayingCardTrumpDash4,
PlayingCardTrumpDash5,
PlayingCardTrumpDash6,
PlayingCardTrumpDash7,
PlayingCardTrumpDash8,
PlayingCardTrumpDash9,
PlayingCardTrumpDash10,
PlayingCardTrumpDash11,
PlayingCardTrumpDash12,
PlayingCardTrumpDash13,
PlayingCardTrumpDash14,
PlayingCardTrumpDash15,
PlayingCardTrumpDash16,
PlayingCardTrumpDash17,
PlayingCardTrumpDash18,
PlayingCardTrumpDash19,
PlayingCardTrumpDash20,
PlayingCardTrumpDash21,
}
impl Into<char> for PlayingCards {
fn into(self) -> char {
match self {
PlayingCards::PlayingCardBack => '🂠',
PlayingCards::PlayingCardAceOfSpades => '🂡',
PlayingCards::PlayingCardTwoOfSpades => '🂢',
PlayingCards::PlayingCardThreeOfSpades => '🂣',
PlayingCards::PlayingCardFourOfSpades => '🂤',
PlayingCards::PlayingCardFiveOfSpades => '🂥',
PlayingCards::PlayingCardSixOfSpades => '🂦',
PlayingCards::PlayingCardSevenOfSpades => '🂧',
PlayingCards::PlayingCardEightOfSpades => '🂨',
PlayingCards::PlayingCardNineOfSpades => '🂩',
PlayingCards::PlayingCardTenOfSpades => '🂪',
PlayingCards::PlayingCardJackOfSpades => '🂫',
PlayingCards::PlayingCardKnightOfSpades => '🂬',
PlayingCards::PlayingCardQueenOfSpades => '🂭',
PlayingCards::PlayingCardKingOfSpades => '🂮',
PlayingCards::PlayingCardAceOfHearts => '🂱',
PlayingCards::PlayingCardTwoOfHearts => '🂲',
PlayingCards::PlayingCardThreeOfHearts => '🂳',
PlayingCards::PlayingCardFourOfHearts => '🂴',
PlayingCards::PlayingCardFiveOfHearts => '🂵',
PlayingCards::PlayingCardSixOfHearts => '🂶',
PlayingCards::PlayingCardSevenOfHearts => '🂷',
PlayingCards::PlayingCardEightOfHearts => '🂸',
PlayingCards::PlayingCardNineOfHearts => '🂹',
PlayingCards::PlayingCardTenOfHearts => '🂺',
PlayingCards::PlayingCardJackOfHearts => '🂻',
PlayingCards::PlayingCardKnightOfHearts => '🂼',
PlayingCards::PlayingCardQueenOfHearts => '🂽',
PlayingCards::PlayingCardKingOfHearts => '🂾',
PlayingCards::PlayingCardRedJoker => '🂿',
PlayingCards::PlayingCardAceOfDiamonds => '🃁',
PlayingCards::PlayingCardTwoOfDiamonds => '🃂',
PlayingCards::PlayingCardThreeOfDiamonds => '🃃',
PlayingCards::PlayingCardFourOfDiamonds => '🃄',
PlayingCards::PlayingCardFiveOfDiamonds => '🃅',
PlayingCards::PlayingCardSixOfDiamonds => '🃆',
PlayingCards::PlayingCardSevenOfDiamonds => '🃇',
PlayingCards::PlayingCardEightOfDiamonds => '🃈',
PlayingCards::PlayingCardNineOfDiamonds => '🃉',
PlayingCards::PlayingCardTenOfDiamonds => '🃊',
PlayingCards::PlayingCardJackOfDiamonds => '🃋',
PlayingCards::PlayingCardKnightOfDiamonds => '🃌',
PlayingCards::PlayingCardQueenOfDiamonds => '🃍',
PlayingCards::PlayingCardKingOfDiamonds => '🃎',
PlayingCards::PlayingCardBlackJoker => '🃏',
PlayingCards::PlayingCardAceOfClubs => '🃑',
PlayingCards::PlayingCardTwoOfClubs => '🃒',
PlayingCards::PlayingCardThreeOfClubs => '🃓',
PlayingCards::PlayingCardFourOfClubs => '🃔',
PlayingCards::PlayingCardFiveOfClubs => '🃕',
PlayingCards::PlayingCardSixOfClubs => '🃖',
PlayingCards::PlayingCardSevenOfClubs => '🃗',
PlayingCards::PlayingCardEightOfClubs => '🃘',
PlayingCards::PlayingCardNineOfClubs => '🃙',
PlayingCards::PlayingCardTenOfClubs => '🃚',
PlayingCards::PlayingCardJackOfClubs => '🃛',
PlayingCards::PlayingCardKnightOfClubs => '🃜',
PlayingCards::PlayingCardQueenOfClubs => '🃝',
PlayingCards::PlayingCardKingOfClubs => '🃞',
PlayingCards::PlayingCardWhiteJoker => '🃟',
PlayingCards::PlayingCardFool => '🃠',
PlayingCards::PlayingCardTrumpDash1 => '🃡',
PlayingCards::PlayingCardTrumpDash2 => '🃢',
PlayingCards::PlayingCardTrumpDash3 => '🃣',
PlayingCards::PlayingCardTrumpDash4 => '🃤',
PlayingCards::PlayingCardTrumpDash5 => '🃥',
PlayingCards::PlayingCardTrumpDash6 => '🃦',
PlayingCards::PlayingCardTrumpDash7 => '🃧',
PlayingCards::PlayingCardTrumpDash8 => '🃨',
PlayingCards::PlayingCardTrumpDash9 => '🃩',
PlayingCards::PlayingCardTrumpDash10 => '🃪',
PlayingCards::PlayingCardTrumpDash11 => '🃫',
PlayingCards::PlayingCardTrumpDash12 => '🃬',
PlayingCards::PlayingCardTrumpDash13 => '🃭',
PlayingCards::PlayingCardTrumpDash14 => '🃮',
PlayingCards::PlayingCardTrumpDash15 => '🃯',
PlayingCards::PlayingCardTrumpDash16 => '🃰',
PlayingCards::PlayingCardTrumpDash17 => '🃱',
PlayingCards::PlayingCardTrumpDash18 => '🃲',
PlayingCards::PlayingCardTrumpDash19 => '🃳',
PlayingCards::PlayingCardTrumpDash20 => '🃴',
PlayingCards::PlayingCardTrumpDash21 => '🃵',
}
}
}
impl std::convert::TryFrom<char> for PlayingCards {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'🂠' => Ok(PlayingCards::PlayingCardBack),
'🂡' => Ok(PlayingCards::PlayingCardAceOfSpades),
'🂢' => Ok(PlayingCards::PlayingCardTwoOfSpades),
'🂣' => Ok(PlayingCards::PlayingCardThreeOfSpades),
'🂤' => Ok(PlayingCards::PlayingCardFourOfSpades),
'🂥' => Ok(PlayingCards::PlayingCardFiveOfSpades),
'🂦' => Ok(PlayingCards::PlayingCardSixOfSpades),
'🂧' => Ok(PlayingCards::PlayingCardSevenOfSpades),
'🂨' => Ok(PlayingCards::PlayingCardEightOfSpades),
'🂩' => Ok(PlayingCards::PlayingCardNineOfSpades),
'🂪' => Ok(PlayingCards::PlayingCardTenOfSpades),
'🂫' => Ok(PlayingCards::PlayingCardJackOfSpades),
'🂬' => Ok(PlayingCards::PlayingCardKnightOfSpades),
'🂭' => Ok(PlayingCards::PlayingCardQueenOfSpades),
'🂮' => Ok(PlayingCards::PlayingCardKingOfSpades),
'🂱' => Ok(PlayingCards::PlayingCardAceOfHearts),
'🂲' => Ok(PlayingCards::PlayingCardTwoOfHearts),
'🂳' => Ok(PlayingCards::PlayingCardThreeOfHearts),
'🂴' => Ok(PlayingCards::PlayingCardFourOfHearts),
'🂵' => Ok(PlayingCards::PlayingCardFiveOfHearts),
'🂶' => Ok(PlayingCards::PlayingCardSixOfHearts),
'🂷' => Ok(PlayingCards::PlayingCardSevenOfHearts),
'🂸' => Ok(PlayingCards::PlayingCardEightOfHearts),
'🂹' => Ok(PlayingCards::PlayingCardNineOfHearts),
'🂺' => Ok(PlayingCards::PlayingCardTenOfHearts),
'🂻' => Ok(PlayingCards::PlayingCardJackOfHearts),
'🂼' => Ok(PlayingCards::PlayingCardKnightOfHearts),
'🂽' => Ok(PlayingCards::PlayingCardQueenOfHearts),
'🂾' => Ok(PlayingCards::PlayingCardKingOfHearts),
'🂿' => Ok(PlayingCards::PlayingCardRedJoker),
'🃁' => Ok(PlayingCards::PlayingCardAceOfDiamonds),
'🃂' => Ok(PlayingCards::PlayingCardTwoOfDiamonds),
'🃃' => Ok(PlayingCards::PlayingCardThreeOfDiamonds),
'🃄' => Ok(PlayingCards::PlayingCardFourOfDiamonds),
'🃅' => Ok(PlayingCards::PlayingCardFiveOfDiamonds),
'🃆' => Ok(PlayingCards::PlayingCardSixOfDiamonds),
'🃇' => Ok(PlayingCards::PlayingCardSevenOfDiamonds),
'🃈' => Ok(PlayingCards::PlayingCardEightOfDiamonds),
'🃉' => Ok(PlayingCards::PlayingCardNineOfDiamonds),
'🃊' => Ok(PlayingCards::PlayingCardTenOfDiamonds),
'🃋' => Ok(PlayingCards::PlayingCardJackOfDiamonds),
'🃌' => Ok(PlayingCards::PlayingCardKnightOfDiamonds),
'🃍' => Ok(PlayingCards::PlayingCardQueenOfDiamonds),
'🃎' => Ok(PlayingCards::PlayingCardKingOfDiamonds),
'🃏' => Ok(PlayingCards::PlayingCardBlackJoker),
'🃑' => Ok(PlayingCards::PlayingCardAceOfClubs),
'🃒' => Ok(PlayingCards::PlayingCardTwoOfClubs),
'🃓' => Ok(PlayingCards::PlayingCardThreeOfClubs),
'🃔' => Ok(PlayingCards::PlayingCardFourOfClubs),
'🃕' => Ok(PlayingCards::PlayingCardFiveOfClubs),
'🃖' => Ok(PlayingCards::PlayingCardSixOfClubs),
'🃗' => Ok(PlayingCards::PlayingCardSevenOfClubs),
'🃘' => Ok(PlayingCards::PlayingCardEightOfClubs),
'🃙' => Ok(PlayingCards::PlayingCardNineOfClubs),
'🃚' => Ok(PlayingCards::PlayingCardTenOfClubs),
'🃛' => Ok(PlayingCards::PlayingCardJackOfClubs),
'🃜' => Ok(PlayingCards::PlayingCardKnightOfClubs),
'🃝' => Ok(PlayingCards::PlayingCardQueenOfClubs),
'🃞' => Ok(PlayingCards::PlayingCardKingOfClubs),
'🃟' => Ok(PlayingCards::PlayingCardWhiteJoker),
'🃠' => Ok(PlayingCards::PlayingCardFool),
'🃡' => Ok(PlayingCards::PlayingCardTrumpDash1),
'🃢' => Ok(PlayingCards::PlayingCardTrumpDash2),
'🃣' => Ok(PlayingCards::PlayingCardTrumpDash3),
'🃤' => Ok(PlayingCards::PlayingCardTrumpDash4),
'🃥' => Ok(PlayingCards::PlayingCardTrumpDash5),
'🃦' => Ok(PlayingCards::PlayingCardTrumpDash6),
'🃧' => Ok(PlayingCards::PlayingCardTrumpDash7),
'🃨' => Ok(PlayingCards::PlayingCardTrumpDash8),
'🃩' => Ok(PlayingCards::PlayingCardTrumpDash9),
'🃪' => Ok(PlayingCards::PlayingCardTrumpDash10),
'🃫' => Ok(PlayingCards::PlayingCardTrumpDash11),
'🃬' => Ok(PlayingCards::PlayingCardTrumpDash12),
'🃭' => Ok(PlayingCards::PlayingCardTrumpDash13),
'🃮' => Ok(PlayingCards::PlayingCardTrumpDash14),
'🃯' => Ok(PlayingCards::PlayingCardTrumpDash15),
'🃰' => Ok(PlayingCards::PlayingCardTrumpDash16),
'🃱' => Ok(PlayingCards::PlayingCardTrumpDash17),
'🃲' => Ok(PlayingCards::PlayingCardTrumpDash18),
'🃳' => Ok(PlayingCards::PlayingCardTrumpDash19),
'🃴' => Ok(PlayingCards::PlayingCardTrumpDash20),
'🃵' => Ok(PlayingCards::PlayingCardTrumpDash21),
_ => Err(()),
}
}
}
impl Into<u32> for PlayingCards {
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 PlayingCards {
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 PlayingCards {
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 PlayingCards {
pub fn new() -> Self {
PlayingCards::PlayingCardBack
}
pub fn name(&self) -> String {
let s = std::format!("PlayingCards{:#?}", self);
string_morph::to_sentence_case(&s)
}
}