50 lines
999 B
Rust
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());
|
|
}
|
|
}
|