53 lines
2.4 KiB
TypeScript
53 lines
2.4 KiB
TypeScript
import { Nullable } from '../utils';
|
|
export interface MapAccess {
|
|
nextKeySeed<T, K extends Deserialize<T>>(seed: K): Nullable<T>;
|
|
nextValueSeed<T, V extends Deserialize<T>>(seed: V): Nullable<T>;
|
|
nextEntrySeed<TK, TV, K extends Deserialize<TK>, V extends Deserialize<TV>>(kseed: K, vseed: V): Nullable<[TK, TV]>;
|
|
nextKey<T>(): Nullable<T>;
|
|
nextValue<T>(): Nullable<T>;
|
|
nextEntry<K, V>(): Nullable<[K, V]>;
|
|
}
|
|
export declare abstract class DefaultMapAccessImpl implements MapAccess {
|
|
abstract nextKeySeed<T, K extends Deserialize<T>>(seed: K): Nullable<T>;
|
|
abstract nextValueSeed<T, V extends Deserialize<T>>(seed: V): Nullable<T>;
|
|
nextEntrySeed<TK, TV, K extends Deserialize<TK>, V extends Deserialize<TV>>(kseed: K, vseed: V): Nullable<[TK, TV]>;
|
|
nextKey<T>(): Nullable<T>;
|
|
nextValue<T>(): Nullable<T>;
|
|
nextEntry<K, V>(): Nullable<[K, V]>;
|
|
}
|
|
export interface IterableAccess {
|
|
nextElementSeed<T, I extends Deserialize<T>>(seed: I): Nullable<T>;
|
|
nextElement<T>(): Nullable<T>;
|
|
sizeHint(): number;
|
|
}
|
|
export declare abstract class DefaultIterableAccessImpl implements IterableAccess {
|
|
abstract nextElementSeed<T, I extends Deserialize<T>>(seed: I): Nullable<T>;
|
|
nextElement<T>(): Nullable<T>;
|
|
sizeHint(): number;
|
|
}
|
|
export interface Visitor<T> {
|
|
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;
|
|
visitClass(name: string, value: MapAccess): T;
|
|
visitIterable?(value: IterableAccess): T;
|
|
}
|
|
export interface Deserializer {
|
|
deserializeAny<T, V extends Visitor<T>>(visitor: V): T;
|
|
deserializeString<T, V extends Visitor<T>>(visitor: V): T;
|
|
deserializeNumber<T, V extends Visitor<T>>(visitor: V): T;
|
|
deserializeBigInt<T, V extends Visitor<T>>(visitor: V): T;
|
|
deserializeBoolean<T, V extends Visitor<T>>(visitor: V): T;
|
|
deserializeSymbol<T, V extends Visitor<T>>(visitor: V): T;
|
|
deserializeNull<T, V extends Visitor<T>>(visitor: V): T;
|
|
deserializeObject<T, V extends Visitor<T>>(visitor: V): T;
|
|
deserializeClass<T, V extends Visitor<T>>(name: string, visitor: V): T;
|
|
deserializeIterable<T, V extends Visitor<T>>(visitor: V): T;
|
|
}
|
|
export interface Deserialize<T> {
|
|
deserialize<D extends Deserializer>(deserializer: D): T;
|
|
}
|