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 turn
- Move- a struct which describes every other possible turn
Example for Castling turn
0-0 will be translated to:
Castling;
Examples for Move turns
d6 will be translated to:
Move ;
d7xe8=B+? will be translated to:
Move ;
Nab3# will be translated to:
Move ;
Chess notation parser rules
- 
Square notation should use lowercase alphabetic characters - Valid: a1,a2...h7,h8.
 
- Valid: 
- 
Castling notation can be written with both 0andO- Valid example: 0-0-0orO-O
- When Castlingturn is printed out, it will be printed with0notation
 
- Valid example: 
- 
Notation for pieces: - K: King
- Q: Queen
- R: Rook
- B: Bishop
- N: Knight
- Pawns are indicated by the absence of the letter
 
- 
Capture is annotated with a lowercase xcharacter- 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 8and1
- 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: