ParseError

enum class chesscxx::ParseError : uint8_t

Represents possible errors that may occur during parsing operations.

Values:

enumerator kInvalidRank

Invalid rank token.

enumerator kInvalidFile

Invalid file token.

enumerator kInvalidPieceType

Invalid piece type token.

enumerator kInvalidPromotablePieceType

Invalid promotable piece type token.

enumerator kInvalidSanCastling

Invalid SAN castling notation.

enumerator kInvalidSlashSymbol

Invalid slash ‘/’ token.

enumerator kMissingPiecePlacementInfo

Piece placement information is incomplete.

enumerator kMissingRankInfo

Rank information is incomplete.

enumerator kInvalidPiece

Invalid piece token.

enumerator kInvalidCastlingAvailability

Invalid castling availability string.

enumerator kInvalidWhiteSpace

Invalid white space token.

enumerator kInvalidDashSymbol

Invalid dash ‘-’ token.

enumerator kNumberOutOfRange

Parsed number is out of range.

enumerator kInvalidNumber

Invalid number format.

enumerator kInvalidColor

Invalid color token.

enumerator kInvalidCheckIndicator

Invalid check indicator token.

enumerator kInvalidTag

Invalid PGN tag.

enumerator kInvalidQuote

Invalid quote ‘”’ token.

enumerator kInvalidRightBracket

Invalid right bracket ‘]’ token.

enumerator kInvalidPiecePlacement

Parsed PiecePlacement is invalid. See PiecePlacementError to see possible causes.

enumerator kInvalidPosition

Parsed Position is invalid. See PositionError to see possible causes.

enumerator kInvalidGameResult

Invalid game result string.

enumerator kInvalidMove

Invalid move. See MoveError to see possible causes.

enumerator kDuplicatedFenTag

Duplicated FEN tag.

enumerator kExpectingEndOfString

Expected end of string, but found more characters.

Helper classes

template<>
struct formatter : public chesscxx::internal::NoSpec
#include <parse_error_formatter.h>

formatting support for chesscxx::ParseError

Examples

#include <chesscxx/game.h>
#include <chesscxx/parse.h>
#include <chesscxx/parse_error.h>

#include <print>
#include <string_view>

namespace {
void printErrorOrValue(auto parsed_value) {
  if (parsed_value) {
    std::println("{:fen}", parsed_value.value());
  } else {
    std::println("{}", parsed_value.error());
  }
}

void parseAsPgnAndPrint(std::string_view str) {
  auto parsed_game = chesscxx::parse<chesscxx::Game>(str);
  printErrorOrValue(parsed_game);
}

void parseAsFenAndPrint(std::string_view str) {
  auto parsed_game =
      chesscxx::parse<chesscxx::Game>(str, chesscxx::parse_as::Fen{});
  printErrorOrValue(parsed_game);
}
}  // namespace

auto main() -> int {
  std::println("{}", chesscxx::ParseError::kInvalidRank);
  std::println("{}\n", chesscxx::ParseError::kExpectingEndOfString);

  parseAsFenAndPrint(
      "rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - 0 1");

  parseAsFenAndPrint(
      "rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - 0 1 ");

  parseAsPgnAndPrint(
      "rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1");

  parseAsPgnAndPrint(
      "[FEN \"7k/8/6KN/8/7B/8/8/8 w - - 0 1\"]\n"
      "[FEN \"7k/8/6KN/8/7B/8/8/8 w - - 0 1\"]\n"
      "1. Bf6#");

  parseAsPgnAndPrint(
      "[FEN \"7k/8/6KN/8/7B/8/8/8 w - - 0 1\"]\n"
      "1. Bf6#");

  parseAsPgnAndPrint(
      "[]\n"
      "1. b3 e5 2. Bb2 d6 3. e3 Nf6 4. d4 exd4 5. Qxd4 Be7 6. Nf3 O-O 7. Nbd2 "
      "Nc6 8. Qc3 Nd5 9. Qxg7# 1-0");

  parseAsPgnAndPrint(
      "[Result \"1-0\"]\n"
      "1. b3 e5 2. Bb2 d6 3. e3 Nf6 4. d4 exd4 5. Qxd4 Be7 6. Nf3 O-O 7. Nbd2 "
      "Nc6 8. Qc3 Nd5 9. Qxg7# 1-0");
}

Output:

Invalid rank
Expecting end of string

rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - 0 1
Expecting end of string
Invalid file
Duplicated fen tag
7k/8/5BKN/8/8/8/8/8 b - - 1 1
Invalid tag
r1bq1rk1/ppp1bpQp/2np4/3n4/8/1P2PN2/PBPN1PPP/R3KB1R b KQ - 0 9