import { Nullable } from '../utils'; export interface IMapAccess { nextKey(seed?: Deserialize): IteratorResult; nextValue(seed?: Deserialize): IteratorResult; nextEntry(kseed?: Deserialize, vseed?: Deserialize): IteratorResult<[K, V]>; sizeHint?(): Nullable; entries(seed?: Deserialize): Iterator; values(seed?: Deserialize): Iterator; entries(kseed: Deserialize, vseed: Deserialize): Iterator<[K, V]>; [Symbol.iterator](): Iterator<[K, V]>; } export declare abstract class MapAccess { abstract nextKey(seed?: Deserialize): IteratorResult; abstract nextValue(seed?: Deserialize): IteratorResult; nextEntry(kseed?: Deserialize, vseed?: Deserialize): IteratorResult<[K, V]>; private generate; keys(seed?: Deserialize): Iterator; values(seed?: Deserialize): Iterator; entries(kseed?: Deserialize, vseed?: Deserialize): Iterator<[K, V]>; [Symbol.iterator](): Iterator; } export interface IIterableAccess { nextElement(seed: Deserialize): IteratorResult; sizeHint?(): Nullable; [Symbol.iterator](): Iterator; } export declare abstract class IterableAccess implements IIterableAccess { abstract nextElement(seed: Deserialize): IteratorResult; [Symbol.iterator](): Iterator; } export declare function isVisitor(visitor: any): visitor is IVisitor; export interface IVisitor { visitBoolean(value: boolean): T; visitNumber(value: number): T; visitBigInt(value: bigint): T; visitString(value: string): T; visitSymbol(value: symbol): T; visitNull(): T; visitObject(access: IMapAccess): T; visitIterable(access: IIterableAccess): T; } export interface IDeserializer { deserializeAny(visitor: Partial>): T; deserializeBoolean(visitor: Partial>): T; deserializeNumber(visitor: Partial>): T; deserializeBigInt(visitor: Partial>): T; deserializeString(visitor: Partial>): T; deserializeSymbol(visitor: Partial>): T; deserializeNull(visitor: Partial>): T; deserializeObject(visitor: Partial>): T; deserializeIterable(visitor: Partial>): T; deserializeFunction(visitor: Partial>): T; } export interface Deserialize { (deserializer: IDeserializer): T; }