import { ABI } from "../chain/abi.js"; import { ABIDecoder } from "./decoder.js"; import { ABIEncoder } from "./encoder.js"; export type ABISerializable = ABISerializableObject | string | boolean | ABISerializable[] | { [key: string]: ABISerializable; }; export type ABISerializableType = string | ABISerializableConstructor | ABITypeDescriptor; export interface ABISerializableObject { toABI?(encoder: ABIEncoder): void; toJSON(): any; equals(other: any): boolean; } export interface ABITypeModifiers { optional?: boolean; array?: boolean; size?: number; extension?: boolean; } export interface ABITypeDescriptor extends ABITypeModifiers { type: ABISerializableConstructor | string; } export interface ABIField extends ABITypeDescriptor { name: string; } export interface ABISerializableConstructor { abiName: string; abiFields?: ABIField[]; abiBase?: ABISerializableConstructor; abiVariant?: ABITypeDescriptor[]; abiAlias?: ABITypeDescriptor; abiDefault?: () => ABISerializable; from(value: any): ABISerializable; fromABI?(decoder: ABIDecoder): ABISerializable; toABI?(value: any, encoder: ABIEncoder): void; new (...args: any[]): ABISerializableObject; } export declare function synthesizeABI(type: ABISerializableConstructor): { abi: ABI; types: ABISerializableConstructor[]; root: string; }; export declare function abiTypeString(type: ABITypeDescriptor): string; export declare function isTypeDescriptor(type: ABISerializableType): type is ABITypeDescriptor; export declare function toTypeDescriptor(type: ABISerializableType): ABITypeDescriptor; export declare function isABISerializableObject(value: any): value is ABISerializableObject; //# sourceMappingURL=serializable.d.ts.map