freecell/game_state/
debug_display.rs

1use std::fmt::{Debug, Display, Formatter, Result};
2
3use super::GameState;
4
5impl Display for GameState {
6    fn fmt(&self, f: &mut Formatter) -> Result {
7        // foundations
8        writeln!(f, "{}\n", self.foundations)?;
9
10        // cascades
11        for (i, cascade) in self.cascades.iter().enumerate() {
12            let cascade_cards: Vec<String> = cascade.iter().map(
13                |card| card.to_string()
14            ).collect();
15            writeln!(f, "Cascade {}: {}", i + 1, cascade_cards.join(", "))?;
16        }
17        writeln!(f)?;
18
19        // freecells
20        let freecell_cards: Vec<String> = self.freecells.iter().map(
21            |card| card.to_string()
22        ).collect();
23        writeln!(f, "Freecells: {}", freecell_cards.join(", "))
24    }
25}
26
27// TODO [high priority] document that the debug output can be used as input file
28// TODO [med priority] test whether this outputs in the same format that the test inputs use
29impl Debug for GameState {
30    fn fmt(&self, f: &mut Formatter) -> Result {
31        // foundations
32        writeln!(f, "{:?}\n", self.foundations)?;
33
34        // cascades
35        for cascade in &self.cascades {
36            write!(f, "Cascade:")?;
37            for card in cascade {
38                write!(f, " {:?}", card)?;
39            }
40            writeln!(f)?;
41        }
42        writeln!(f)?;
43
44        // freecells
45        write!(f, "Freecells:")?;
46        for card in &self.freecells {
47            write!(f, " {:?}", card)?;
48        }
49        writeln!(f)
50    }
51}