import { type ElementDescriptor, type LogicManifest } from "js-moi-manifest";
import { type Accessor, type AccessorProvider, type StorageTypeProvider } from "./accessor";
export interface AccessorBuilder {
    /**
     * Adds a length accessor to the accessor builder.
     * This accessor can be used to retrieve the length of an array or map.
     *
     * @returns The accessor builder instance.
     */
    length(): void;
    /**
     * Adds a property accessor to the accessor builder.
     *
     * Used to access to value of key in a map.
     *
     * @param key - The label of the property.
     * @returns The accessor builder instance.
     */
    property(key: string | number | boolean | Uint8Array | Buffer): AccessorBuilder;
    /**
     * Adds an accessor for the specified index to the AccessorBuilder.
     *
     * @param index - The index of the accessor.
     * @returns The AccessorBuilder instance.
     */
    at(index: number): AccessorBuilder;
    /**
     * Adds a field to the accessor builder.
     *
     * Used to access the value of a field in a class.
     *
     * @param fieldName - The label of the field.
     * @returns The accessor builder instance.
     */
    field(fieldName: string): AccessorBuilder;
}
export declare class SlotAccessorBuilder implements AccessorBuilder, AccessorProvider, StorageTypeProvider {
    private accessors;
    readonly elementDescriptor: ElementDescriptor;
    private slotType;
    private readonly typeField;
    constructor(field: LogicManifest.TypeField, logicDescriptor: ElementDescriptor);
    /**
     * Retrieves the storage type of the accessor builder.
     * @returns The storage type.
     */
    getStorageType(): string;
    /**
     * Retrieves the base slot of the accessor builder.
     * @returns The base slot.
     */
    getBaseSlot(): number;
    /**
     * Retrieves the accessors of the accessor builder.
     * @returns The accessors.
     */
    getAccessors(): Accessor[];
    length(): void;
    property(key: string): SlotAccessorBuilder;
    at(index: number): SlotAccessorBuilder;
    field(fieldName: string): SlotAccessorBuilder;
    /**
     * Checks if the given `builder` is an instance of `SlotAccessorBuilder`.
     *
     * @param builder - The accessor builder to check.
     * @returns `true` if the `builder` is an instance of `SlotAccessorBuilder`, `false` otherwise.
     */
    static isSlotAccessorBuilder(builder: unknown): builder is SlotAccessorBuilder;
}
//# sourceMappingURL=accessor-builder.d.ts.map