import _m0 from 'protobufjs/minimal';
export declare const protobufPackage = "yandex.cloud.access";
export declare enum AccessBindingAction {
    ACCESS_BINDING_ACTION_UNSPECIFIED = 0,
    /** ADD - Addition of an access binding. */
    ADD = 1,
    /** REMOVE - Removal of an access binding. */
    REMOVE = 2,
    UNRECOGNIZED = -1
}
export declare function accessBindingActionFromJSON(object: any): AccessBindingAction;
export declare function accessBindingActionToJSON(object: AccessBindingAction): string;
export interface Subject {
    /**
     * ID of the subject.
     *
     * It can contain one of the following values:
     * * `allAuthenticatedUsers`: A special public group that represents anyone
     *    who is authenticated. It can be used only if the [type] is `system`.
     * * `allUsers`: A special public group that represents anyone. No authentication is required.
     *    For example, you don't need to specify the IAM token in an API query.
     *    It can be used only if the [type] is `system`.
     * * `group:organization:<id>:users`: A special system group that represents all members of organization
     *    with given <id>. It can be used only if the [type] is `system`.
     * * `group:federation:<id>:users`: A special system group that represents all users of federation
     *    with given <id>. It can be used only if the [type] is `system`.
     * * `<cloud generated id>`: An identifier that represents a user account.
     *    It can be used only if the [type] is `userAccount`, `federatedUser` or `serviceAccount`.
     */
    id: string;
    /**
     * Type of the subject.
     *
     * It can contain one of the following values:
     * * `userAccount`: An account on Yandex or Yandex Connect, added to Yandex Cloud.
     * * `serviceAccount`: A service account. This type represents the [yandex.cloud.iam.v1.ServiceAccount] resource.
     * * `federatedUser`: A federated account. This type represents a user from an identity federation, like Active Directory.
     * * `system`: System group. This type represents several accounts with a common system identifier.
     *
     * For more information, see [Subject to which the role is assigned](/docs/iam/concepts/access-control/#subject).
     */
    type: string;
}
export interface AccessBinding {
    /** ID of the [yandex.cloud.iam.v1.Role] that is assigned to the [subject]. */
    roleId: string;
    /**
     * Identity for which access binding is being created.
     * It can represent an account with a unique ID or several accounts with a system identifier.
     */
    subject?: Subject;
}
export interface ListAccessBindingsRequest {
    /**
     * ID of the resource to list access bindings for.
     *
     * To get the resource ID, use a corresponding List request.
     * For example, use the [yandex.cloud.resourcemanager.v1.CloudService.List] request to get the Cloud resource ID.
     */
    resourceId: string;
    /**
     * The maximum number of results per page that should be returned. If the number of available
     * results is larger than [page_size],
     * the service returns a [ListAccessBindingsResponse.next_page_token]
     * that can be used to get the next page of results in subsequent list requests.
     * Default value: 100.
     */
    pageSize: number;
    /**
     * Page token. Set [page_token]
     * to the [ListAccessBindingsResponse.next_page_token]
     * returned by a previous list request to get the next page of results.
     */
    pageToken: string;
}
export interface ListAccessBindingsResponse {
    /** List of access bindings for the specified resource. */
    accessBindings: AccessBinding[];
    /**
     * This token allows you to get the next page of results for list requests. If the number of results
     * is larger than [ListAccessBindingsRequest.page_size], use
     * the [next_page_token] as the value
     * for the [ListAccessBindingsRequest.page_token] query parameter
     * in the next list request. Each subsequent list request will have its own
     * [next_page_token] to continue paging through the results.
     */
    nextPageToken: string;
}
export interface SetAccessBindingsRequest {
    /**
     * ID of the resource for which access bindings are being set.
     *
     * To get the resource ID, use a corresponding List request.
     */
    resourceId: string;
    /** Access bindings to be set. For more information, see [Access Bindings](/docs/iam/concepts/access-control/#access-bindings). */
    accessBindings: AccessBinding[];
}
export interface SetAccessBindingsMetadata {
    /** ID of the resource for which access bindings are being set. */
    resourceId: string;
}
export interface UpdateAccessBindingsRequest {
    /** ID of the resource for which access bindings are being updated. */
    resourceId: string;
    /** Updates to access bindings. */
    accessBindingDeltas: AccessBindingDelta[];
}
export interface UpdateAccessBindingsMetadata {
    /** ID of the resource for which access bindings are being updated. */
    resourceId: string;
}
export interface AccessBindingDelta {
    /** The action that is being performed on an access binding. */
    action: AccessBindingAction;
    /** Access binding. For more information, see [Access Bindings](/docs/iam/concepts/access-control/#access-bindings). */
    accessBinding?: AccessBinding;
}
export interface AccessBindingsOperationResult {
    /** Result access binding deltas. */
    effectiveDeltas: AccessBindingDelta[];
}
export declare const Subject: {
    encode(message: Subject, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number): Subject;
    fromJSON(object: any): Subject;
    toJSON(message: Subject): unknown;
    fromPartial<I extends {
        id?: string | undefined;
        type?: string | undefined;
    } & {
        id?: string | undefined;
        type?: string | undefined;
    } & Record<Exclude<keyof I, keyof Subject>, never>>(object: I): Subject;
};
export declare const AccessBinding: {
    encode(message: AccessBinding, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number): AccessBinding;
    fromJSON(object: any): AccessBinding;
    toJSON(message: AccessBinding): unknown;
    fromPartial<I extends {
        roleId?: string | undefined;
        subject?: {
            id?: string | undefined;
            type?: string | undefined;
        } | undefined;
    } & {
        roleId?: string | undefined;
        subject?: ({
            id?: string | undefined;
            type?: string | undefined;
        } & {
            id?: string | undefined;
            type?: string | undefined;
        } & Record<Exclude<keyof I["subject"], keyof Subject>, never>) | undefined;
    } & Record<Exclude<keyof I, keyof AccessBinding>, never>>(object: I): AccessBinding;
};
export declare const ListAccessBindingsRequest: {
    encode(message: ListAccessBindingsRequest, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number): ListAccessBindingsRequest;
    fromJSON(object: any): ListAccessBindingsRequest;
    toJSON(message: ListAccessBindingsRequest): unknown;
    fromPartial<I extends {
        resourceId?: string | undefined;
        pageSize?: number | undefined;
        pageToken?: string | undefined;
    } & {
        resourceId?: string | undefined;
        pageSize?: number | undefined;
        pageToken?: string | undefined;
    } & Record<Exclude<keyof I, keyof ListAccessBindingsRequest>, never>>(object: I): ListAccessBindingsRequest;
};
export declare const ListAccessBindingsResponse: {
    encode(message: ListAccessBindingsResponse, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number): ListAccessBindingsResponse;
    fromJSON(object: any): ListAccessBindingsResponse;
    toJSON(message: ListAccessBindingsResponse): unknown;
    fromPartial<I extends {
        accessBindings?: {
            roleId?: string | undefined;
            subject?: {
                id?: string | undefined;
                type?: string | undefined;
            } | undefined;
        }[] | undefined;
        nextPageToken?: string | undefined;
    } & {
        accessBindings?: ({
            roleId?: string | undefined;
            subject?: {
                id?: string | undefined;
                type?: string | undefined;
            } | undefined;
        }[] & ({
            roleId?: string | undefined;
            subject?: {
                id?: string | undefined;
                type?: string | undefined;
            } | undefined;
        } & {
            roleId?: string | undefined;
            subject?: ({
                id?: string | undefined;
                type?: string | undefined;
            } & {
                id?: string | undefined;
                type?: string | undefined;
            } & Record<Exclude<keyof I["accessBindings"][number]["subject"], keyof Subject>, never>) | undefined;
        } & Record<Exclude<keyof I["accessBindings"][number], keyof AccessBinding>, never>)[] & Record<Exclude<keyof I["accessBindings"], keyof {
            roleId?: string | undefined;
            subject?: {
                id?: string | undefined;
                type?: string | undefined;
            } | undefined;
        }[]>, never>) | undefined;
        nextPageToken?: string | undefined;
    } & Record<Exclude<keyof I, keyof ListAccessBindingsResponse>, never>>(object: I): ListAccessBindingsResponse;
};
export declare const SetAccessBindingsRequest: {
    encode(message: SetAccessBindingsRequest, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number): SetAccessBindingsRequest;
    fromJSON(object: any): SetAccessBindingsRequest;
    toJSON(message: SetAccessBindingsRequest): unknown;
    fromPartial<I extends {
        resourceId?: string | undefined;
        accessBindings?: {
            roleId?: string | undefined;
            subject?: {
                id?: string | undefined;
                type?: string | undefined;
            } | undefined;
        }[] | undefined;
    } & {
        resourceId?: string | undefined;
        accessBindings?: ({
            roleId?: string | undefined;
            subject?: {
                id?: string | undefined;
                type?: string | undefined;
            } | undefined;
        }[] & ({
            roleId?: string | undefined;
            subject?: {
                id?: string | undefined;
                type?: string | undefined;
            } | undefined;
        } & {
            roleId?: string | undefined;
            subject?: ({
                id?: string | undefined;
                type?: string | undefined;
            } & {
                id?: string | undefined;
                type?: string | undefined;
            } & Record<Exclude<keyof I["accessBindings"][number]["subject"], keyof Subject>, never>) | undefined;
        } & Record<Exclude<keyof I["accessBindings"][number], keyof AccessBinding>, never>)[] & Record<Exclude<keyof I["accessBindings"], keyof {
            roleId?: string | undefined;
            subject?: {
                id?: string | undefined;
                type?: string | undefined;
            } | undefined;
        }[]>, never>) | undefined;
    } & Record<Exclude<keyof I, keyof SetAccessBindingsRequest>, never>>(object: I): SetAccessBindingsRequest;
};
export declare const SetAccessBindingsMetadata: {
    encode(message: SetAccessBindingsMetadata, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number): SetAccessBindingsMetadata;
    fromJSON(object: any): SetAccessBindingsMetadata;
    toJSON(message: SetAccessBindingsMetadata): unknown;
    fromPartial<I extends {
        resourceId?: string | undefined;
    } & {
        resourceId?: string | undefined;
    } & Record<Exclude<keyof I, "resourceId">, never>>(object: I): SetAccessBindingsMetadata;
};
export declare const UpdateAccessBindingsRequest: {
    encode(message: UpdateAccessBindingsRequest, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number): UpdateAccessBindingsRequest;
    fromJSON(object: any): UpdateAccessBindingsRequest;
    toJSON(message: UpdateAccessBindingsRequest): unknown;
    fromPartial<I extends {
        resourceId?: string | undefined;
        accessBindingDeltas?: {
            action?: AccessBindingAction | undefined;
            accessBinding?: {
                roleId?: string | undefined;
                subject?: {
                    id?: string | undefined;
                    type?: string | undefined;
                } | undefined;
            } | undefined;
        }[] | undefined;
    } & {
        resourceId?: string | undefined;
        accessBindingDeltas?: ({
            action?: AccessBindingAction | undefined;
            accessBinding?: {
                roleId?: string | undefined;
                subject?: {
                    id?: string | undefined;
                    type?: string | undefined;
                } | undefined;
            } | undefined;
        }[] & ({
            action?: AccessBindingAction | undefined;
            accessBinding?: {
                roleId?: string | undefined;
                subject?: {
                    id?: string | undefined;
                    type?: string | undefined;
                } | undefined;
            } | undefined;
        } & {
            action?: AccessBindingAction | undefined;
            accessBinding?: ({
                roleId?: string | undefined;
                subject?: {
                    id?: string | undefined;
                    type?: string | undefined;
                } | undefined;
            } & {
                roleId?: string | undefined;
                subject?: ({
                    id?: string | undefined;
                    type?: string | undefined;
                } & {
                    id?: string | undefined;
                    type?: string | undefined;
                } & Record<Exclude<keyof I["accessBindingDeltas"][number]["accessBinding"]["subject"], keyof Subject>, never>) | undefined;
            } & Record<Exclude<keyof I["accessBindingDeltas"][number]["accessBinding"], keyof AccessBinding>, never>) | undefined;
        } & Record<Exclude<keyof I["accessBindingDeltas"][number], keyof AccessBindingDelta>, never>)[] & Record<Exclude<keyof I["accessBindingDeltas"], keyof {
            action?: AccessBindingAction | undefined;
            accessBinding?: {
                roleId?: string | undefined;
                subject?: {
                    id?: string | undefined;
                    type?: string | undefined;
                } | undefined;
            } | undefined;
        }[]>, never>) | undefined;
    } & Record<Exclude<keyof I, keyof UpdateAccessBindingsRequest>, never>>(object: I): UpdateAccessBindingsRequest;
};
export declare const UpdateAccessBindingsMetadata: {
    encode(message: UpdateAccessBindingsMetadata, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number): UpdateAccessBindingsMetadata;
    fromJSON(object: any): UpdateAccessBindingsMetadata;
    toJSON(message: UpdateAccessBindingsMetadata): unknown;
    fromPartial<I extends {
        resourceId?: string | undefined;
    } & {
        resourceId?: string | undefined;
    } & Record<Exclude<keyof I, "resourceId">, never>>(object: I): UpdateAccessBindingsMetadata;
};
export declare const AccessBindingDelta: {
    encode(message: AccessBindingDelta, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number): AccessBindingDelta;
    fromJSON(object: any): AccessBindingDelta;
    toJSON(message: AccessBindingDelta): unknown;
    fromPartial<I extends {
        action?: AccessBindingAction | undefined;
        accessBinding?: {
            roleId?: string | undefined;
            subject?: {
                id?: string | undefined;
                type?: string | undefined;
            } | undefined;
        } | undefined;
    } & {
        action?: AccessBindingAction | undefined;
        accessBinding?: ({
            roleId?: string | undefined;
            subject?: {
                id?: string | undefined;
                type?: string | undefined;
            } | undefined;
        } & {
            roleId?: string | undefined;
            subject?: ({
                id?: string | undefined;
                type?: string | undefined;
            } & {
                id?: string | undefined;
                type?: string | undefined;
            } & Record<Exclude<keyof I["accessBinding"]["subject"], keyof Subject>, never>) | undefined;
        } & Record<Exclude<keyof I["accessBinding"], keyof AccessBinding>, never>) | undefined;
    } & Record<Exclude<keyof I, keyof AccessBindingDelta>, never>>(object: I): AccessBindingDelta;
};
export declare const AccessBindingsOperationResult: {
    encode(message: AccessBindingsOperationResult, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number): AccessBindingsOperationResult;
    fromJSON(object: any): AccessBindingsOperationResult;
    toJSON(message: AccessBindingsOperationResult): unknown;
    fromPartial<I extends {
        effectiveDeltas?: {
            action?: AccessBindingAction | undefined;
            accessBinding?: {
                roleId?: string | undefined;
                subject?: {
                    id?: string | undefined;
                    type?: string | undefined;
                } | undefined;
            } | undefined;
        }[] | undefined;
    } & {
        effectiveDeltas?: ({
            action?: AccessBindingAction | undefined;
            accessBinding?: {
                roleId?: string | undefined;
                subject?: {
                    id?: string | undefined;
                    type?: string | undefined;
                } | undefined;
            } | undefined;
        }[] & ({
            action?: AccessBindingAction | undefined;
            accessBinding?: {
                roleId?: string | undefined;
                subject?: {
                    id?: string | undefined;
                    type?: string | undefined;
                } | undefined;
            } | undefined;
        } & {
            action?: AccessBindingAction | undefined;
            accessBinding?: ({
                roleId?: string | undefined;
                subject?: {
                    id?: string | undefined;
                    type?: string | undefined;
                } | undefined;
            } & {
                roleId?: string | undefined;
                subject?: ({
                    id?: string | undefined;
                    type?: string | undefined;
                } & {
                    id?: string | undefined;
                    type?: string | undefined;
                } & Record<Exclude<keyof I["effectiveDeltas"][number]["accessBinding"]["subject"], keyof Subject>, never>) | undefined;
            } & Record<Exclude<keyof I["effectiveDeltas"][number]["accessBinding"], keyof AccessBinding>, never>) | undefined;
        } & Record<Exclude<keyof I["effectiveDeltas"][number], keyof AccessBindingDelta>, never>)[] & Record<Exclude<keyof I["effectiveDeltas"], keyof {
            action?: AccessBindingAction | undefined;
            accessBinding?: {
                roleId?: string | undefined;
                subject?: {
                    id?: string | undefined;
                    type?: string | undefined;
                } | undefined;
            } | undefined;
        }[]>, never>) | undefined;
    } & Record<Exclude<keyof I, "effectiveDeltas">, never>>(object: I): AccessBindingsOperationResult;
};
type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
export type DeepPartial<T> = T extends Builtin ? T : T extends Array<infer U> ? Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : T extends {} ? {
    [K in keyof T]?: DeepPartial<T[K]>;
} : Partial<T>;
type KeysOfUnion<T> = T extends T ? keyof T : never;
export type Exact<P, I extends P> = P extends Builtin ? P : P & {
    [K in keyof P]: Exact<P[K], I[K]>;
} & Record<Exclude<keyof I, KeysOfUnion<P>>, never>;
export {};
