import type { Engine, Mino } from "../../../engine";
import type * as Messages from "../types/messages";
export declare abstract class Adapter<T extends Messages.CustomMessageData = Messages.CustomMessageData> {
    abstract initialize(): Promise<Messages.Incoming.Info<T>>;
    protected configFromEngine(engine: Engine): Omit<Messages.Outgoing.Config<T>, "type" | "data">;
    protected stateFromEngine(engine: Engine): Omit<Messages.Outgoing.State<T>, "type" | "data">;
    protected playFromEngine(engine: Engine): Omit<Messages.Outgoing.Play<T>, "type" | "data">;
    abstract config(engine: Engine, data?: T["config"]): void;
    abstract update(engine: Engine, data?: T["state"]): void;
    abstract addPieces(pieces: Mino[], data?: T["pieces"]): void;
    abstract play(engine: Engine, data?: T["play"]): Promise<Messages.Incoming.Move<T>>;
    abstract stop(): void;
}
//# sourceMappingURL=index.d.ts.map