import { Nullable } from '../utils'; export interface MapAccess { nextKeySeed>(seed: K): Nullable; nextValueSeed>(seed: V): Nullable; nextEntrySeed, V extends Deserialize>(kseed: K, vseed: V): Nullable<[TK, TV]>; nextKey(): Nullable; nextValue(): Nullable; nextEntry(): Nullable<[K, V]>; } export declare abstract class DefaultMapAccessImpl implements MapAccess { abstract nextKeySeed>(seed: K): Nullable; abstract nextValueSeed>(seed: V): Nullable; nextEntrySeed, V extends Deserialize>(kseed: K, vseed: V): Nullable<[TK, TV]>; nextKey(): Nullable; nextValue(): Nullable; nextEntry(): Nullable<[K, V]>; } export interface IterableAccess { nextElementSeed>(seed: I): Nullable; nextElement(): Nullable; sizeHint(): number; } export declare abstract class DefaultIterableAccessImpl implements IterableAccess { abstract nextElementSeed>(seed: I): Nullable; nextElement(): Nullable; sizeHint(): number; } export interface Visitor { visitString(value: string): T; visitNumber(value: number): T; visitBigInt(value: bigint): T; visitBoolean(value: boolean): T; visitSymbol(value: symbol): T; visitNull(): T; visitObject(value: MapAccess): T; visitIterable?(value: IterableAccess): T; } export interface Deserializer { deserializeAny>(visitor: V): T; deserializeString>(visitor: V): T; deserializeNumber>(visitor: V): T; deserializeBigInt>(visitor: V): T; deserializeBoolean>(visitor: V): T; deserializeSymbol>(visitor: V): T; deserializeNull>(visitor: V): T; deserializeObject>(visitor: V): T; deserializeClass>(name: string, fields: string[], visitor: V): T; deserializeIterable>(visitor: V): T; } export interface Deserialize { deserialize(deserializer: D): T; }