diff --git a/rs/src/main.rs b/rs/src/main.rs index dacbaa8..389888c 100644 --- a/rs/src/main.rs +++ b/rs/src/main.rs @@ -11,7 +11,7 @@ fn main() -> Result<(), ()> { match input_lines.next() { None => break Ok(()), Some(line) => match &line.unwrap()[..] { - "get_state" => println!("{}", board.to_string()), + "get_state" => println!("{}", board), _ => break Err(()), }, } diff --git a/rs/src/ui.rs b/rs/src/ui.rs index 65fff9d..dbea8bc 100644 --- a/rs/src/ui.rs +++ b/rs/src/ui.rs @@ -1,59 +1,53 @@ use crate::board; use crate::board::GridAxis; -impl board::Color { - fn to_string(&self) -> String { +impl std::fmt::Display for board::Color { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { match self { - board::Color::White => "W".to_string(), - board::Color::Black => "B".to_string(), + board::Color::White => write!(f, "W"), + board::Color::Black => write!(f, "B"), } } } -impl board::PieceType { - fn to_string(&self) -> String { +impl std::fmt::Display for board::PieceType { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { match self { - board::PieceType::Pawn => "P".to_string(), + board::PieceType::Pawn => write!(f, "P"), } } } -impl board::Piece { - fn to_string(&self) -> String { - self.piece_type.to_string() + &self.color.to_string() +impl std::fmt::Display for board::Piece { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + write!(f, "{}{}", self.piece_type, self.color) } } -trait GridAxisIO -where - Self: GridAxis, -{ - const ALL_CHARS: [char; 8]; - fn to_string(&self) -> String { - Self::ALL_CHARS[self.get_index() as usize].to_string() +impl std::fmt::Display for board::Rank { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + const ALL_CHARS: [char; 8] = ['1', '2', '3', '4', '5', '6', '7', '8']; + write!(f, "{}", ALL_CHARS[self.get_index() as usize]) } } -impl GridAxisIO for board::Rank { - const ALL_CHARS: [char; Self::ALL_VALUES.len()] = - ['1', '2', '3', '4', '5', '6', '7', '8']; -} - -impl GridAxisIO for board::File { - const ALL_CHARS: [char; Self::ALL_VALUES.len()] = - ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']; -} - -impl board::Position { - fn to_string(&self) -> String { - self.file.to_string() + &self.rank.to_string() +impl std::fmt::Display for board::File { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + const ALL_CHARS: [char; 8] = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']; + write!(f, "{}", ALL_CHARS[self.get_index() as usize]) } } -impl board::Board { - pub fn to_string(&self) -> String { - self.iter() - .map(|(position, piece)| piece.to_string() + &position.to_string()) - .collect() +impl std::fmt::Display for board::Position { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + write!(f, "{}{}", self.file, self.rank) + } +} + +impl std::fmt::Display for board::Board { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + Ok(for (position, piece) in self.iter() { + write!(f, "{}{}", piece, position)? + }) } }