@chainsafe/ssz
Version:
Simple Serialize
57 lines (56 loc) • 2.81 kB
TypeScript
import { HashComputationLevel, Node, Tree } from "@chainsafe/persistent-merkle-tree";
import { Require } from "../util/types.ts";
import { ByteViews, Type } from "./abstract.ts";
import { CompositeType } from "./composite.ts";
type Union<T> = {
readonly selector: number;
value: T;
};
type ValueOfTypes<Types extends Type<unknown>[]> = Types extends Type<infer T>[] ? Union<T> : never;
export type UnionOpts = {
typeName?: string;
};
/**
* Union: union type containing one of the given subtypes
* - Notation: Union[type_0, type_1, ...], e.g. union[None, uint64, uint32]
*/
export declare class UnionType<Types extends Type<unknown>[]> extends CompositeType<ValueOfTypes<Types>, ValueOfTypes<Types>, ValueOfTypes<Types>> {
readonly types: Types;
readonly typeName: string;
readonly depth = 1;
readonly maxChunkCount = 1;
readonly fixedSize: null;
readonly minSize: number;
readonly maxSize: number;
readonly isList = true;
readonly isViewMutable = true;
readonly mixInLengthBlockBytes: Uint8Array<ArrayBuffer>;
readonly mixInLengthBuffer: Buffer<ArrayBufferLike>;
protected readonly maxSelector: number;
constructor(types: Types, opts?: UnionOpts);
static named<Types extends Type<unknown>[]>(types: Types, opts: Require<UnionOpts, "typeName">): UnionType<Types>;
defaultValue(): ValueOfTypes<Types>;
getView(tree: Tree): ValueOfTypes<Types>;
getViewDU(node: Node): ValueOfTypes<Types>;
cacheOfViewDU(): unknown;
commitView(view: ValueOfTypes<Types>): Node;
commitViewDU(view: ValueOfTypes<Types>, hcOffset?: number, hcByLevel?: HashComputationLevel[] | null): Node;
value_serializedSize(value: ValueOfTypes<Types>): number;
value_serializeToBytes(output: ByteViews, offset: number, value: ValueOfTypes<Types>): number;
value_deserializeFromBytes(data: ByteViews, start: number, end: number): ValueOfTypes<Types>;
tree_serializedSize(node: Node): number;
tree_serializeToBytes(output: ByteViews, offset: number, node: Node): number;
tree_deserializeFromBytes(data: ByteViews, start: number, end: number): Node;
hashTreeRoot(value: ValueOfTypes<Types>): Uint8Array;
hashTreeRootInto(value: ValueOfTypes<Types>, output: Uint8Array, offset: number): void;
protected getBlocksBytes(value: ValueOfTypes<Types>): Uint8Array;
getPropertyGindex(prop: string): bigint;
getPropertyType(): never;
getIndexProperty(index: number): string | number;
tree_getLeafGindices(rootGindex: bigint, rootNode?: Node): bigint[];
fromJson(json: unknown): ValueOfTypes<Types>;
toJson(value: ValueOfTypes<Types>): Record<string, unknown>;
clone(value: ValueOfTypes<Types>): ValueOfTypes<Types>;
equals(a: ValueOfTypes<Types>, b: ValueOfTypes<Types>): boolean;
}
export {};