Function alcibiades::utils::parse_fen [] [src]

pub fn parse_fen(s: &str) -> Result<(Board, u8, u16), IllegalBoard>

Parses Forsyth–Edwards Notation (FEN).

Returns a tuple with the following elements: 0) a board instance, 1) halfmove clock, 2) fullmove number.

Forsyth–Edwards Notation

A FEN string defines a particular position using only the ASCII character set. A FEN string contains six fields separated by a space. The fields are:

  1. Piece placement (from white's perspective). Each rank is described, starting with rank 8 and ending with rank 1. Within each rank, the contents of each square are described from file A through file H. Following the Standard Algebraic Notation (SAN), each piece is identified by a single letter taken from the standard English names. White pieces are designated using upper-case letters ("PNBRQK") whilst Black uses lowercase ("pnbrqk"). Blank squares are noted using digits 1 through 8 (the number of blank squares), and "/" separates ranks.

  2. Active color. "w" means white moves next, "b" means black.

  3. Castling availability. If neither side can castle, this is "-". Otherwise, this has one or more letters: "K" (White can castle kingside), "Q" (White can castle queenside), "k" (Black can castle kingside), and/or "q" (Black can castle queenside).

  4. En-passant target square (in algebraic notation). If there's no en-passant target square, this is "-". If a pawn has just made a 2-square move, this is the position "behind" the pawn. This is recorded regardless of whether there is a pawn in position to make an en-passant capture.

  5. Halfmove clock. This is the number of halfmoves since the last pawn advance or capture. This is used to determine if a draw can be claimed under the fifty-move rule.

  6. Fullmove number. The number of the full move. It starts at 1, and is incremented after black's move.

Example:

The starting position: rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w QKqk - 0 1