30 lines
1 KiB
TypeScript
30 lines
1 KiB
TypeScript
import { Primitive, ToString } from "../utils";
|
|
export interface ObjectSerializer<T = void> {
|
|
serializeKey<U extends Serializable>(key: U): T;
|
|
serializeValue<U extends Serializable>(value: U): T;
|
|
end(): T;
|
|
}
|
|
export interface IterableSerializer<T = void> {
|
|
serializeElement<U extends Serializable>(element: U): T;
|
|
end(): T;
|
|
}
|
|
interface TypeSerializer<T> {
|
|
serializeString(value: string): T;
|
|
serializeNumber(value: number): T;
|
|
serializeBigInt(value: bigint): T;
|
|
serializeBoolean(value: boolean): T;
|
|
serializeSymbol(value: Symbol): T;
|
|
serializeNull(): T;
|
|
serializeObject(): ObjectSerializer<T>;
|
|
serializeIterable?(): IterableSerializer<T>;
|
|
}
|
|
interface AnySerializer<T> {
|
|
serializeAny?(value?: any): T;
|
|
}
|
|
export declare function isGenericSerializer(value: any): boolean;
|
|
export type Serializer<T> = Partial<TypeSerializer<T>> & Partial<AnySerializer<T>>;
|
|
export type Serializable = Primitive | ToString | Serialize;
|
|
export interface Serialize {
|
|
serialize<T, S extends Serializer<T>>(serializer: S): T;
|
|
}
|
|
export {};
|