diff --git a/klondike/src/lib.rs b/klondike/src/lib.rs index d86b63a..09e91b0 100644 --- a/klondike/src/lib.rs +++ b/klondike/src/lib.rs @@ -347,8 +347,8 @@ impl KlondikeState { KlondikePileStack::Stock => self.stock.face_up().last(), } } - pub fn top_card(&self, src: KlondikePile) -> Option<&Card> { - match src { + pub fn top_card>(&self, src: S) -> Option<&Card> { + match src.into() { KlondikePile::Tableau(tableau) => match tableau { Tableau::Tableau1 => self.tableau1.face_up().last(), Tableau::Tableau2 => self.tableau2.face_up().last(), @@ -382,8 +382,8 @@ impl KlondikeState { KlondikePileStack::Stock => Stack::from_iter(self.stock.pop()), } } - fn take_top_card(&mut self, src: KlondikePile) -> Option { - match src { + fn take_top_card>(&mut self, src: S) -> Option { + match src.into() { KlondikePile::Tableau(tableau) => match tableau { Tableau::Tableau1 => self.tableau1.pop_flip_up(), Tableau::Tableau2 => self.tableau2.pop_flip_up(), @@ -397,8 +397,8 @@ impl KlondikeState { KlondikePile::Stock => self.stock.pop_flip_up(), } } - fn extend>(&mut self, dst: KlondikePile, cards: I) { - match dst { + fn extend, I: IntoIterator>(&mut self, dst: D, cards: I) { + match dst.into() { KlondikePile::Tableau(tableau) => match tableau { Tableau::Tableau1 => self.tableau1.extend(cards), Tableau::Tableau2 => self.tableau2.extend(cards), @@ -426,7 +426,7 @@ impl KlondikeState { KlondikeInstruction::DstFoundation(dst_foundation) => { // get the top cards if let Some(src_card) = self.top_card(dst_foundation.src) { - match self.top_card(dst_foundation.foundation.into()) { + match self.top_card(dst_foundation.foundation) { // destination card exists Some(dst_card) => { // suit matches? @@ -445,7 +445,7 @@ impl KlondikeState { KlondikeInstruction::DstTableau(dst_tableau) => { // get the cards if let Some(src_card) = self.card(dst_tableau.src) { - match self.top_card(dst_tableau.tableau.into()) { + match self.top_card(dst_tableau.tableau) { // destination card exists Some(dst_card) => { // red-ness is opposite? @@ -555,12 +555,12 @@ impl Game for Klondike { } } KlondikeInstruction::DstFoundation(DstFoundation { src, foundation }) => { - let cards = self.state.take_top_card(src); - self.state.extend(foundation.into(), cards); + let card = self.state.take_top_card(src); + self.state.extend(foundation, card); } KlondikeInstruction::DstTableau(DstTableau { src, tableau }) => { let cards = self.state.take_stack(src); - self.state.extend(tableau.into(), cards); + self.state.extend(tableau, cards); } } }