import { ABIField, ABISerializableConstructor, ABISerializableObject, ABITypeModifiers } from "../serializer/Serializable.js";
export interface StructConstructor extends ABISerializableConstructor {
    new <T extends Struct>(...args: any[]): T;
    structFields: ABIField[];
}
export declare class Struct implements ABISerializableObject {
    static abiName: string;
    static abiFields: ABIField[];
    static abiBase: ABISerializableConstructor;
    static from<T extends StructConstructor>(this: T, value: any): InstanceType<T>;
    static from(value: any): unknown;
    static get structFields(): ABIField[];
    /** @internal */
    constructor(object: any);
    /**
     * Return true if this struct equals the other.
     *
     * Note: This compares the ABI encoded bytes of both structs, subclasses
     *       should implement their own fast equality check when possible.
     */
    equals(other: any): boolean;
    /** @internal */
    toJSON(): any;
}
export declare namespace Struct {
    function type(name: string): <T extends StructConstructor>(struct: T) => T;
    function field(type: ABISerializableConstructor | string, options?: ABITypeModifiers): <T extends Struct>(target: T, name: string) => void;
}
//# sourceMappingURL=Struct.d.ts.map