import { CopyableIsaacAPIClassType } from "isaac-typescript-definitions";
import type { SerializedBitSet128 } from "../functions/bitSet128";
import { copyBitSet128, deserializeBitSet128, isBitSet128, isSerializedBitSet128, serializeBitSet128 } from "../functions/bitSet128";
import type { SerializedColor } from "../functions/color";
import { copyColor, deserializeColor, isColor, isSerializedColor, serializeColor } from "../functions/color";
import type { SerializedKColor } from "../functions/kColor";
import { copyKColor, deserializeKColor, isKColor, isSerializedKColor, serializeKColor } from "../functions/kColor";
import type { SerializedRNG } from "../functions/rng";
import { copyRNG, deserializeRNG, isRNG, isSerializedRNG, serializeRNG } from "../functions/rng";
import type { SerializedVector } from "../functions/vector";
import { copyVector, deserializeVector, isSerializedVector, isVector, serializeVector } from "../functions/vector";
/** A type representing an Isaac API class that can be safely copied or serialized. */
export type CopyableIsaacAPIClass = BitSet128 | Color | KColor | RNG | Vector;
/**
 * A type representing an Isaac API class like `Color` or `RNG` that has been written to the
 * "save#.dat" file. It is used by the save data manager when reading and writing to that file.
 *
 * For the list of supported classes, see the `CopyableIsaacAPIClassType` enum.
 */
export type SerializedIsaacAPIClass = SerializedBitSet128 | SerializedColor | SerializedKColor | SerializedRNG | SerializedVector;
export interface IsaacAPIClassTypeToType {
    [CopyableIsaacAPIClassType.BIT_SET_128]: BitSet128;
    [CopyableIsaacAPIClassType.COLOR]: Color;
    [CopyableIsaacAPIClassType.K_COLOR]: KColor;
    [CopyableIsaacAPIClassType.RNG]: RNG;
    [CopyableIsaacAPIClassType.VECTOR]: Vector;
}
export interface IsaacAPIClassTypeToSerializedType {
    [CopyableIsaacAPIClassType.BIT_SET_128]: SerializedBitSet128;
    [CopyableIsaacAPIClassType.COLOR]: SerializedColor;
    [CopyableIsaacAPIClassType.K_COLOR]: SerializedKColor;
    [CopyableIsaacAPIClassType.RNG]: SerializedRNG;
    [CopyableIsaacAPIClassType.VECTOR]: SerializedVector;
}
export interface IsaacAPIClassTypeFunctions<T, SerializedT> {
    is: (object: unknown) => object is T;
    isSerialized: (object: unknown) => object is SerializedT;
    copy: (object: T) => T;
    serialize: (object: T) => SerializedT;
    deserialize: (object: SerializedT) => T;
}
export declare const ISAAC_API_CLASS_TYPE_TO_FUNCTIONS: {
    readonly BitSet128: {
        readonly is: typeof isBitSet128;
        readonly isSerialized: typeof isSerializedBitSet128;
        readonly copy: typeof copyBitSet128;
        readonly serialize: typeof serializeBitSet128;
        readonly deserialize: typeof deserializeBitSet128;
    };
    readonly Color: {
        readonly is: typeof isColor;
        readonly isSerialized: typeof isSerializedColor;
        readonly copy: typeof copyColor;
        readonly serialize: typeof serializeColor;
        readonly deserialize: typeof deserializeColor;
    };
    readonly KColor: {
        readonly is: typeof isKColor;
        readonly isSerialized: typeof isSerializedKColor;
        readonly copy: typeof copyKColor;
        readonly serialize: typeof serializeKColor;
        readonly deserialize: typeof deserializeKColor;
    };
    readonly RNG: {
        readonly is: typeof isRNG;
        readonly isSerialized: typeof isSerializedRNG;
        readonly copy: typeof copyRNG;
        readonly serialize: typeof serializeRNG;
        readonly deserialize: typeof deserializeRNG;
    };
    readonly Vector: {
        readonly is: typeof isVector;
        readonly isSerialized: typeof isSerializedVector;
        readonly copy: typeof copyVector;
        readonly serialize: typeof serializeVector;
        readonly deserialize: typeof deserializeVector;
    };
};
//# sourceMappingURL=isaacAPIClassTypeToFunctions.d.ts.map