toJson method

Map<String, dynamic> toJson({
  1. bool verbose = false,
  2. List<BishopTypeAdapter> adapters = const [],
})

Implementation

Map<String, dynamic> toJson({
  bool verbose = false,
  List<BishopTypeAdapter> adapters = const [],
}) {
  final allAdapters = [...adapters, ...this.adapters];
  return {
    'name': name,
    'description': description,
    'bishopVersion': Bishop.version,
    'boardSize': boardSize.simpleString,
    'pieceTypes': pieceTypes.map(
      (k, v) => MapEntry(
        k,
        v.toJson(verbose: verbose, adapters: allAdapters),
      ),
    ),
    'castlingOptions': castlingOptions.toJson(),
    'promotionOptions': BishopSerialisation.export<PromotionOptions>(
      promotionOptions,
      adapters: allAdapters,
    ),
    'materialConditions': materialConditions.toJson(),
    if (verbose || gameEndConditions != GameEndConditionSet.standard)
      'gameEndConditions': gameEndConditions.toJson(),
    if (verbose || outputOptions != OutputOptions.standard)
      'outputOptions': outputOptions.toJson(),
    'startPosition': startPosition,
    if (startPosBuilder != null)
      'startPosBuilder': BishopSerialisation.export<StartPositionBuilder>(
        startPosBuilder!,
        adapters: allAdapters,
      ),
    'enPassant': enPassant,
    if (verbose || firstMoveOptions is! InitialStateFirstMoveOptions)
      'firstMoveOptions': BishopSerialisation.export<FirstMoveOptions>(
        firstMoveOptions,
        adapters: allAdapters,
      ),
    if (halfMoveDraw != null) 'halfMoveDraw': halfMoveDraw,
    if (repetitionDraw != null) 'repetitionDraw': repetitionDraw,
    if (verbose || forbidChecks) 'forbidChecks': forbidChecks,
    if (verbose || forcedCapture != null)
      'forcedCapture': forcedCapture?.name,
    if (verbose || handOptions.enableHands)
      'handOptions': handOptions.toJson(
        verbose: verbose,
        adapters: allAdapters,
      ),
    if (verbose || gatingMode != GatingMode.none)
      'gatingMode': gatingMode.name,
    if (pieceValues != null) 'pieceValues': pieceValues,
    if (verbose || passOptions is! NoPass)
      'passOptions': BishopSerialisation.export<PassOptions>(
        passOptions,
        adapters: allAdapters,
      ),
    if (verbose || regions.isNotEmpty)
      'regions': regions.map((k, v) => MapEntry(k, v.toJson())),
    if (verbose || actions.isNotEmpty)
      'actions': BishopSerialisation.exportMany<Action>(
        actions,
        strict: false,
        adapters: allAdapters,
      ),
    if (stateTransformer != null)
      'stateTransformer': BishopSerialisation.export<StateTransformer>(
        stateTransformer!,
        adapters: allAdapters,
      ),
    if (verbose || moveGenerators.isNotEmpty)
      'moveGenerators': BishopSerialisation.exportMany<MoveGenerator>(
        moveGenerators,
        adapters: allAdapters,
      ),
    if (verbose || moveProcessors.isNotEmpty)
      'moveProcessors': BishopSerialisation.exportMany<MoveProcessor>(
        moveProcessors,
        adapters: allAdapters,
      ),
  };
}