Add serialization to String

This commit is contained in:
2021-12-05 18:14:16 +01:00
parent 4f3469b3e3
commit 57931b29de
3 changed files with 68 additions and 19 deletions

View File

@@ -1,7 +1,7 @@
use std::collections::HashMap; use std::collections::HashMap;
#[derive(Clone)] #[derive(Clone)]
enum Color { pub enum Color {
Black, Black,
White, White,
} }
@@ -29,8 +29,8 @@ impl Color {
#[derive(PartialEq, Eq, Hash, Clone)] #[derive(PartialEq, Eq, Hash, Clone)]
pub struct Position { pub struct Position {
rank: Rank, pub rank: Rank,
file: File, pub file: File,
} }
impl Position { impl Position {
@@ -82,7 +82,7 @@ pub enum File {
H, H,
} }
trait GridAxis pub trait GridAxis
where where
Self: Sized, Self: Sized,
Self: Clone, Self: Clone,
@@ -174,8 +174,8 @@ impl PieceType {
} }
pub struct Piece { pub struct Piece {
color: Color, pub color: Color,
piece_type: PieceType, pub piece_type: PieceType,
} }
impl Piece { impl Piece {

View File

@@ -1,17 +1,7 @@
mod board; mod board;
mod ui;
fn main() { fn main() {
println!( let board = board::Board::new();
"{}", println!("{}", board.to_string());
match board::Board::new()
.get_at(&board::Position::new(board::Rank::_2, board::File::A))
{
Some(piece) => "Some",
None => "None",
}
);
// reset -> (ok/fail)
// get_state -> (ok/fail),state
// get_moves,position,[state] -> (ok/fail),position[]
// make_move,[move],[state] -> (ok/fail),state
} }

59
rs/src/ui.rs Normal file
View File

@@ -0,0 +1,59 @@
use crate::board;
use crate::board::GridAxis;
impl board::Color {
fn to_string(&self) -> String {
match self {
board::Color::White => "W".to_string(),
board::Color::Black => "B".to_string(),
}
}
}
impl board::PieceType {
fn to_string(&self) -> String {
match self {
board::PieceType::Pawn => "P".to_string(),
}
}
}
impl board::Piece {
fn to_string(&self) -> String {
self.piece_type.to_string() + &self.color.to_string()
}
}
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 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 board::Board {
pub fn to_string(&self) -> String {
self.iter()
.map(|(position, piece)| piece.to_string() + &position.to_string())
.collect()
}
}