import { Permission, Permissions } from './Permission';
import { AvailableLayerDefinitions } from './bim-api-client';
/**
 * A Layer definition. Describes a layer and its permissions. To create a layer
 * the corresponding layer definition must exist.
 */
export declare class LayerDefinition extends Permissions {
    readonly id: string;
    /** Used to represent a layer definition that does not exist. */
    static readonly notFound: Readonly<LayerDefinition>;
    constructor(id: string, ...permissions: Permission[]);
    /** `true` if the layer definition exists, `false` otherwise. */
    get exists(): boolean;
}
/**
 * Represents how layer definitions are defined in JSON.
 */
export interface LayerDefinitionsDTO {
    [layerDefinitionId: string]: {
        /** permission mask in the form of a bigint string */
        permissionsString: string;
    };
}
/** Represents a collection of {@link LayerDefinition} instances. */
export declare class LayerDefinitions {
    private readonly _definitions;
    /**
     * Constructor.
     * @param definitions Definitions the collection shall consist of.
     */
    constructor(definitions?: LayerDefinition[]);
    /**
     * Creates a {@link LayerDefinitions} instance for a `Record<string, { permission_str: string }>` lookup where
     * the properties are the layer ids. This is how a {@link LayerDefinitions} instance is represented in JSON.
     * @param src Source to copy from.
     * @returns change with converted property.
     */
    static fromDTO(src?: LayerDefinitionsDTO): LayerDefinitions;
    /**
     * Copies the layer definitions defined by `layerDefinitions` to the `dst`.availableLayerDefinitions property.
     * @param layerDefinitions Layer definitions to copy to `dst`.availableLayerDefinitions.
     * @param dst Object to assign property on.
     * @returns Reference to `dst`.
     */
    static copyToRef<T extends AvailableLayerDefinitions>(layerDefinitions: {
        json?: LayerDefinitionsDTO;
    } | LayerDefinitions, dst: T): T;
    /**
     * Gets the {@link LayerDefinition} instance with the same id. If no such instance is found then `{@link LayerDefinition.notFound} is returned.
     * @param id Id of layer definition to get.
     * @returns {@link Layer} instance.
     */
    get(id: string): LayerDefinition;
    /**
     * Iterates all contained {@link LayerDefinition}. Use this to
     * get hold of all {@link LayerDefinition} instances the collection consists of.
     */
    [Symbol.iterator](): IterableIterator<LayerDefinition>;
}
//# sourceMappingURL=LayerDefinitions.d.ts.map