import { Nullable } from '../utils'; export interface IMapAccess { nextKeySeed>(seed: K): IteratorResult; nextValueSeed>(seed: V): IteratorResult; nextEntrySeed, V extends Deserialize>(kseed: K, vseed: V): IteratorResult<[TK, TV]>; nextKey(): IteratorResult; nextValue(): IteratorResult; nextEntry(): IteratorResult<[K, V]>; sizeHint?(): Nullable; entries>(seed?: K): Iterator; values>(seed?: V): Iterator; entries, V extends Deserialize>(kseed: K, vseed: V): Iterator<[TK, TV]>; [Symbol.iterator](): Iterator<[K, V]>; } export declare abstract class MapAccess { abstract nextKeySeed>(seed: K): IteratorResult; abstract nextValueSeed>(seed: V): IteratorResult; private orDefaultSeed; nextEntrySeed, V extends Deserialize>(kseed: K, vseed: V): IteratorResult<[TK, TV]>; nextKey(): IteratorResult; nextValue(): IteratorResult; nextEntry(): IteratorResult<[K, V]>; private generate; keys>(seed?: K): Iterator; values>(seed?: V): Iterator; entries, V extends Deserialize>(kseed?: K, vseed?: V): Iterator<[TK, TV]>; [Symbol.iterator](): Iterator; } export interface IIterableAccess { nextElementSeed>(seed: D): IteratorResult; nextElement(): IteratorResult; sizeHint?(): Nullable; [Symbol.iterator](): Iterator; } export declare abstract class IterableAccess implements IIterableAccess { abstract nextElementSeed>(seed: D): IteratorResult; nextElement(): 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; }