rustjack/backend/src/cards/card_suit.rs
2024-05-24 17:43:35 +02:00

50 lines
999 B
Rust

use std::fmt::Display;
use serde::{Deserialize, Serialize};
#[derive(Clone, Copy, Serialize, Deserialize)]
pub enum CardSuit {
Spades,
Clubs,
Hearts,
Diamonds,
}
impl CardSuit {
pub fn is_red(&self) -> bool {
matches!(self, CardSuit::Hearts | CardSuit::Diamonds)
}
pub fn is_black(&self) -> bool {
!self.is_red()
}
}
impl Display for CardSuit {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let icon = match self {
CardSuit::Clubs => "♣️",
CardSuit::Diamonds => "♦️",
CardSuit::Hearts => "♥️",
CardSuit::Spades => "♠️",
};
f.write_str(icon)?;
Ok(())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn color() {
assert!(CardSuit::Hearts.is_red());
assert!(CardSuit::Diamonds.is_red());
assert!(CardSuit::Clubs.is_black());
assert!(CardSuit::Spades.is_black());
}
}