import GridData from '../grid.js';
import GridConnections from '../gridConnections.js';
import Rule from '../rules/rule.js';
import TileData from '../tile.js';
import Symbol from '../symbols/symbol.js';
import { Puzzle, PuzzleData } from '../puzzle.js';
import GridZones from '../gridZones.js';
export default abstract class SerializerBase {
    abstract get version(): number;
    abstract stringifyTile(tile: TileData): string;
    abstract parseTile(str: string): TileData;
    abstract stringifyRule(rule: Rule): string;
    abstract stringifySymbol(symbol: Symbol): string;
    abstract parseRule(str: string): Rule;
    abstract parseSymbol(str: string): Symbol;
    abstract stringifyConnections(connections: GridConnections): string;
    abstract parseConnections(input: string): GridConnections;
    abstract stringifyZones(zones: GridZones): string;
    abstract parseZones(input: string): GridZones;
    abstract stringifyTiles(tiles: readonly (readonly TileData[])[]): string;
    abstract parseTiles(input: string): TileData[][];
    abstract stringifyRules(rules: readonly Rule[]): string;
    abstract parseRules(input: string): Rule[];
    abstract stringifySymbols(symbols: ReadonlyMap<string, readonly Symbol[]>): string;
    abstract parseSymbols(input: string): Map<string, Symbol[]>;
    abstract stringifyGrid(grid: GridData): string;
    abstract parseGrid(input: string): GridData;
    abstract stringifyGridWithSolution(puzzle: PuzzleData): string;
    abstract parseGridWithSolution(input: string): PuzzleData;
    abstract stringifyPuzzle(puzzle: Puzzle): string;
    abstract parsePuzzle(input: string): Puzzle;
}
