export interface ISerializeObject<T> {
    serializeKey(key: string): void;
    serializeValue<U>(value: U): void;
    serializeEntry<U>(key: string, value: U): void;
    end(): T;
}
export declare abstract class SerializeObject<T> implements ISerializeObject<T> {
    abstract serializeKey(key: string): void;
    abstract serializeValue<U>(value: U): void;
    abstract end(): T;
    serializeEntry<U>(key: string, value: U): void;
}
export interface ISerializeIterable<T> {
    serializeElement<U>(value: U): void;
    end(): T;
}
export declare abstract class SerializeIterable<T> implements ISerializeIterable<T> {
    abstract serializeElement<U>(value: U): void;
    abstract end(): T;
}
export interface ISerializer<T> {
    serializeAny?(value: any): T;
    serializeBoolean(value: boolean): T;
    serializeNumber(value: number): T;
    serializeBigInt(value: bigint): T;
    serializeString(value: string): T;
    serializeSymbol(value: symbol): T;
    serializeNull(): T;
    serializeObject(): ISerializeObject<T>;
    serializeClass(name: string): ISerializeObject<T>;
}
export declare class Serializer<T> implements ISerializer<T> {
    serializeAny(_value: any): T;
    serializeBoolean(_value: boolean): T;
    serializeNumber(_value: number): T;
    serializeBigInt(_value: bigint): T;
    serializeString(_value: string): T;
    serializeSymbol(_value: symbol): T;
    serializeNull(): T;
    serializeObject(): ISerializeObject<T>;
    serializeClass(_name: string): ISerializeObject<T>;
}
export interface Serialize<T> {
    <U, S extends Serializer<U>>(serializer: S, value: T): U;
}