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; }