Make en_passant_square an Option<u8>

This commit is contained in:
2024-06-09 15:54:41 +03:00
parent 880df665d5
commit 1f7cbbe577
4 changed files with 33 additions and 28 deletions

View File

@@ -101,7 +101,7 @@ fn castling_ability(castling: &str) -> Result<u8, FenError> {
use std::collections::HashMap;
fn en_passant_target_square(square: &str) -> Result<u8, FenError> {
fn en_passant_target_square(square: &str) -> Result<Option<u8>, FenError> {
let mut sqr = square.chars();
let mut files: HashMap<char, u8> = HashMap::new();
@@ -120,14 +120,15 @@ fn en_passant_target_square(square: &str) -> Result<u8, FenError> {
match sqr.next() {
Some(file) if files.contains_key(&file) => match sqr.next() {
Some(rank) if ranks.contains_key(&rank) => Ok(ranks.get(&rank).expect("Invalid rank")
* 8
+ files.get(&file).expect("Invalid file")),
Some(rank) if ranks.contains_key(&rank) => Ok(Some(
ranks.get(&rank).expect("Invalid rank") * 8
+ files.get(&file).expect("Invalid file"),
)),
Some(_) | None => Err(FenError::from(
"Not a valid rank (3 or 6) for an en passant target square",
)),
},
Some('-') => Ok(0),
Some('-') => Ok(None),
Some(_) | None => Err(FenError::from("Not a file (a..h) or dash (-) character")),
}
}