diff options
author | eug-vs <eugene@eug-vs.xyz> | 2023-01-28 00:22:44 +0300 |
---|---|---|
committer | eug-vs <eugene@eug-vs.xyz> | 2023-01-28 00:22:44 +0300 |
commit | 690af97aa6c49a8ad76e47a2cee0c0b23b84ae6e (patch) | |
tree | 8ea802d97031dd86827117b86a5cc40ff3285090 /src/square.rs | |
parent | dbf3b8649c45aca6b80d9659363d3e878d54f4ef (diff) | |
download | chessnost-690af97aa6c49a8ad76e47a2cee0c0b23b84ae6e.tar.gz |
feat: implement read_move
Diffstat (limited to 'src/square.rs')
-rw-r--r-- | src/square.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/square.rs b/src/square.rs index efa682c..f26ed4d 100644 --- a/src/square.rs +++ b/src/square.rs @@ -1,3 +1,5 @@ +use std::str::Chars; + use crate::bitboard::Bitboard; /// Aliases to board square indexes @@ -49,6 +51,36 @@ impl Square { pub fn east_one(&self) -> Self { Self::from(*self as u8 + 1) } + + pub fn from_notation(chars: &mut Chars) -> Self { + let file = match chars.next() { + Some(ch) => { + match ch { + 'a' => 0, + 'b' => 1, + 'c' => 2, + 'd' => 3, + 'e' => 4, + 'f' => 5, + 'g' => 6, + 'h' => 7, + _ => panic!("Incorrect file!") + } + }, + None => panic!("Missing file"), + }; + let rank = match chars.next() { + Some(ch) => { + match ch.to_digit(10) { + Some(digit) => digit - 1, + None => panic!("Incorrect rank") + } + } + None => panic!("Missing rank") + }; + + Self::from_coords(rank as u8, file) + } } |