import { Registry } from '../registry'; import { Constructor } from '../utils'; type Nullable = T | undefined; export declare class IterResult { static Next(value: T): IteratorResult; static Done(): IteratorResult; } 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 declare class GenericSeed { readonly visitor: IVisitor; constructor(visitor?: IVisitor); static deserialize(deserializer: D, visitor?: IVisitor): T; deserialize(deserializer: D): T; } export declare class GenericVisitor implements 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 declare class ForwardMapAccess extends MapAccess { private readonly keys; private readonly values; private kindex; private vindex; constructor(keys: string[], values: any[]); static fromObject(obj: object): ForwardMapAccess; nextKeySeed(_seed: K): IteratorResult; nextValueSeed(_seed: V): IteratorResult; nextKey(): IteratorResult; nextValue(): IteratorResult; } export declare class ForwardIterableAccess extends IterableAccess { private readonly items; private index; constructor(items: any[]); nextElement(): IteratorResult; } export declare class Forward implements IDeserializer { private readonly value; constructor(value: any); static with(value: any): Forward; 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; } export declare function deserialize(deserializer: D, into: Constructor, registry?: Registry): T; export {};