use std::fmt;
#[derive(Debug, Eq, PartialEq, Copy, Clone, Ord, PartialOrd, Hash)]
pub enum Suit {
Spades,
Hearts,
Diamonds,
Clubs,
}
impl Suit {
fn short_string(&self) -> &'static str {
match *self {
Suit::Spades => "s",
Suit::Hearts => "h",
Suit::Diamonds => "d",
Suit::Clubs => "c",
}
}
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Ord, PartialOrd, Hash)]
pub enum Value {
Two,
Three,
Four,
Five,
Six,
Seven,
Eight,
Nine,
Ten,
Jack,
Queen,
King,
Ace,
}
impl Value {
fn short_string(&self) -> &'static str {
match *self {
Value::Two => "2",
Value::Three => "3",
Value::Four => "4",
Value::Five => "5",
Value::Six => "6",
Value::Seven => "7",
Value::Eight => "8",
Value::Nine => "9",
Value::Ten => "T",
Value::Jack => "J",
Value::Queen => "Q",
Value::King => "K",
Value::Ace => "A",
}
}
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Ord, PartialOrd, Hash)]
pub struct Card {
pub value: Value,
pub suit: Suit
}
impl Card {
pub fn new(value: Value, suit: Suit) -> Card {
Card{ value: value, suit: suit }
}
}
impl fmt::Display for Card {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}{}", self.value.short_string(), self.suit.short_string())
}
}