import type { Account } from './Account';
import type { Permission } from './Permission';
import type { RoleState } from './RoleState';
/**
 *
 * @export
 * @interface Role
 */
export interface Role {
    /**
     * The permissions granted to users with this role.
     * @type {Set<Permission>}
     * @memberof Role
     */
    readonly permissions?: Set<Permission>;
    /**
     * The name used to identify the role.
     * @type {{ [key: string]: string; }}
     * @memberof Role
     */
    readonly name?: {
        [key: string]: string;
    };
    /**
     * The date and time when the object is planned to be permanently removed. If the value is empty, the object will not be removed.
     * @type {Date}
     * @memberof Role
     */
    readonly plannedPurgeDate?: Date;
    /**
     * A unique identifier for the object.
     * @type {number}
     * @memberof Role
     */
    readonly id?: number;
    /**
     *
     * @type {RoleState}
     * @memberof Role
     */
    state?: RoleState;
    /**
     * The version is used for optimistic locking and incremented whenever the object is updated.
     * @type {number}
     * @memberof Role
     */
    readonly version?: number;
    /**
     *
     * @type {Account}
     * @memberof Role
     */
    account?: Account;
    /**
     * Whether users with this role are required to use two-factor authentication.
     * @type {boolean}
     * @memberof Role
     */
    readonly twoFactorRequired?: boolean;
}
/**
 * Check if a given object implements the Role interface.
 */
export declare function instanceOfRole(value: object): value is Role;
export declare function RoleFromJSON(json: any): Role;
export declare function RoleFromJSONTyped(json: any, ignoreDiscriminator: boolean): Role;
export declare function RoleToJSON(json: any): Role;
export declare function RoleToJSONTyped(value?: Omit<Role, 'permissions' | 'name' | 'plannedPurgeDate' | 'id' | 'version' | 'twoFactorRequired'> | null, ignoreDiscriminator?: boolean): any;
