Expand description
§Chess notation parser
Crate transforms algebraic chess notation into software readable structs and
vice versa. Parsed chess notation for each turn is stored within Turn
struct.
To parse a certain chess turn, such as d2xe3
, store it in form of &str
and pass it as an argument into Turn::try_from()
function.
Turn
is an enum with two elements:
Castling
- a struct which describes castling turnMove
- a struct which describes every other possible turn
§Example for Castling
turn
§0-0
will be translated to:
Turn::Castling(Castling {
r#type: CastlingType::Short,
flags: Flag::NONE,
});
§Examples for Move
turns
§d6
will be translated to:
Turn::Move (Move {
who: Piece::Pawn,
dst: Square::D6,
flags: Flag::NONE,
src: None,
promotion: None,
});
§d7xe8=B+?
will be translated to:
Turn::Move (Move {
who: Piece::Pawn,
dst: Square::E8,
flags: Flag::CHECK | Flag::CAPTURE,
src: Some(vec![Square::D7]),
promotion: Some(Piece::Bishop),
});
§Nab3#
will be translated to:
Turn::Move (Move {
who: Piece::Knight,
dst: Square::B3,
flags: Flag::CHECKMATE,
src: Some(Square::get_file('a').unwrap()), // Vector of 'Ax' squares
promotion: None,
});
§Chess notation parser rules
-
Square notation should use lowercase alphabetic characters
- Valid:
a1
,a2
…h7
,h8
.
- Valid:
-
Castling notation can be written with both
0
andO
- Valid example:
0-0-0
orO-O
- When
Castling
turn is printed out, it will be printed with0
notation
- Valid example:
-
Notation for pieces:
K
: KingQ
: QueenR
: RookB
: BishopN
: Knight- Pawns are indicated by the absence of the letter
-
Capture is annotated with a lowercase
x
character- Valid example:
Qxd3
- Valid example:
-
Check is annotated with a
+
character- Valid example:
Qd3+
- Valid example:
-
Checkmate is annotated with a
#
character- Valid example:
Qd3#
- Valid example:
-
Pawn promotion is annoted with
=
symbol followed by a piece to which pawn is promoted to- Pawn promotion is valid only for ranks
8
and1
- Valid example:
g8=Q
- Pawn promotion is valid only for ranks
-
Comments
??
,!!
,?
,!
,!?
,?!
are allowed only at the end of the turn- Valid example:
a1=B??
- Invalid example:
??a1=B
- Valid example:
Modules§
- Flag
- Bitmask flag depicts special capabilities of a chess turn (check, checkmate, capture)
Macros§
- turn_
castling - Creates a
Turn::Castling
from given number of arguments - turn_
move - Creates a
Turn::Move
from given number of arguments
Structs§
Enums§
- Castling
Type - Castling type (side)
- Piece
- Chess pieces
- Square
- Chess board square
- Turn
- Struct representation of a string formatted chess turn
Traits§
- Flag
Check - Implements function to easily check chess turn flags