import { ICorePlatform } from '../types/platform.js';
import { MaybePromise } from '../types/utils.js';
import { Logger } from '../utils/logger.js';
/**
 * Basic storage driver interface,
 * describing the lifecycle of a storage driver
 */
export interface IStorageDriver {
    /**
     * Load session from some external storage.
     * Should be used either to load data from file/network/etc
     * to memory, or to open required connections to fetch data on demand
     *
     * May be called more than once, handle this with care
     * (or use {@link BaseStorageDriver} that handles this for you)
     */
    load?: () => MaybePromise<void>;
    /**
     * Save session to some external storage.
     * Should be used to commit pending changes in the session.
     * For example, saving session content to file/network/etc,
     * or committing a database transaction
     *
     * It is safe to batch all changes and only commit them here,
     * unless stated otherwise in the method description
     */
    save?: () => MaybePromise<void>;
    /**
     * Cleanup session and release all used resources.
     *
     * May be called more than once, handle this with care
     * (or use {@link BaseStorageDriver} that handles this for you)
     */
    destroy?: () => MaybePromise<void>;
    /**
     * Setup the driver, passing the logger instance,
     * in case your driver needs it
     */
    setup?: (log: Logger, platform: ICorePlatform) => void;
}
/**
 * Base storage driver class, implementing {@link IStorageDriver}
 * and handling the lifecycle for you
 */
export declare abstract class BaseStorageDriver implements IStorageDriver {
    abstract _load(): MaybePromise<void>;
    abstract _destroy(): MaybePromise<void>;
    abstract _save?(): MaybePromise<void>;
    private _loadedTimes;
    private _destroyed;
    protected _log: Logger;
    protected _platform: ICorePlatform;
    setup(log: Logger, platform: ICorePlatform): void;
    protected get loaded(): boolean;
    load(): Promise<void>;
    destroy(): Promise<void>;
    save(): MaybePromise<void>;
}
