import { AsyncSeriesHook, AsyncSeriesWaterfallHook } from "tapable";
export interface BaseSerializerHook<T, U> {
    before: AsyncSeriesWaterfallHook<[T, U]>;
    after: AsyncSeriesHook<[T, U]>;
}
export interface BaseSerializer<T, U> {
    serializeHooks: BaseSerializerHook<T, U>;
    serialize(data: T, ctx: U): Promise<void>;
}
export declare abstract class ModelSerializer<T, U> implements BaseSerializer<T, U> {
    serializeHooks: BaseSerializerHook<T, U>;
    constructor();
    serialize(data: T, ctx: U): Promise<void>;
    protected abstract onSerialize(data: T, ctx: U): Promise<void>;
}
export interface BaseDeserializerHook<T, U> {
    before: AsyncSeriesHook<[U]>;
    after: AsyncSeriesWaterfallHook<[T, U]>;
}
export interface BaseDeserializer<T, U> {
    deserializeHooks: BaseDeserializerHook<T, U>;
    deserialize(ctx: U): Promise<T>;
}
export declare abstract class ModelDeserializer<T, U> implements BaseDeserializer<T, U> {
    deserializeHooks: BaseDeserializerHook<T, U>;
    constructor();
    deserialize(ctx: U): Promise<T>;
    protected abstract onDeserialize(ctx: U): Promise<T>;
}
