import { Nullable } from "../utils"; export interface IMapAccess { nextKeySeed(seed: K): IteratorResult; nextValueSeed(seed: V): IteratorResult; nextEntrySeed(kseed: K, vseed: V): IteratorResult<[TK, TV]>; nextKey(): IteratorResult; nextValue(): IteratorResult; nextEntry(): IteratorResult<[K, V]>; sizeHint?(): Nullable; } export declare abstract class MapAccess { abstract nextKeySeed(seed: K): IteratorResult; abstract nextValueSeed(seed: V): IteratorResult; nextEntrySeed(kseed: K, vseed: V): IteratorResult<[TK, TV]>; abstract nextKey(): IteratorResult; abstract nextValue(): IteratorResult; nextEntry(): IteratorResult<[K, V]>; } export interface IIterableAccess { nextElement(): IteratorResult; sizeHint?(): Nullable; } export declare abstract class IterableAccess implements IIterableAccess { abstract nextElement(): IteratorResult; } 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: V): T; deserializeBoolean>(visitor: V): T; deserializeNumber>(visitor: V): T; deserializeBigInt>(visitor: V): T; deserializeString>(visitor: V): T; deserializeSymbol>(visitor: V): T; deserializeNull>(visitor: V): T; deserializeObject>(visitor: V): T; deserializeIterable>(visitor: V): T; deserializeFunction>(visitor: V): T; } export interface Deserialize { (deserializer: IDeserializer): T; }