/* tslint:disable */
/* eslint-disable */
/**
 * Admin API
 * The Admin API is used to manage the ApeCloud platform. 
 *
 * The version of the OpenAPI document: 1.0.0
 * Contact: support@apecloud.com
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */


import type { Configuration } from '../configuration';
import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios';
import globalAxios from 'axios';
// Some imports not used depending on template conditions
// @ts-ignore
import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common';
// @ts-ignore
import { BASE_PATH, COLLECTION_FORMATS, type RequestArgs, BaseAPI, RequiredError, operationServerMap } from '../base';
// @ts-ignore
import type { APIErrorResponse } from '../models';
// @ts-ignore
import type { RbmqAccountRequest } from '../models';
// @ts-ignore
import type { RbmqAccountsList } from '../models';
// @ts-ignore
import type { RbmqExchange } from '../models';
// @ts-ignore
import type { RbmqPermission } from '../models';
// @ts-ignore
import type { RbmqUser } from '../models';
// @ts-ignore
import type { RbmqVHost } from '../models';
/**
 * RabbitMQApi - axios parameter creator
 * @export
 */
export const RabbitMQApiAxiosParamCreator = function (configuration?: Configuration) {
    return {
        /**
         * Create a new RabbitMQ account
         * @summary Create RabbitMQ account
         * @param {string} orgName name of the Org
         * @param {string} clusterName name of the Cluster
         * @param {RbmqAccountRequest} rbmqAccountRequest 
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        createRabbitAccount: async (orgName: string, clusterName: string, rbmqAccountRequest: RbmqAccountRequest, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
            // verify required parameter 'orgName' is not null or undefined
            assertParamExists('createRabbitAccount', 'orgName', orgName)
            // verify required parameter 'clusterName' is not null or undefined
            assertParamExists('createRabbitAccount', 'clusterName', clusterName)
            // verify required parameter 'rbmqAccountRequest' is not null or undefined
            assertParamExists('createRabbitAccount', 'rbmqAccountRequest', rbmqAccountRequest)
            const localVarPath = `/admin/v1/data/rabbitmq/organizations/{orgName}/clusters/{clusterName}/accounts`
                .replace(`{${"orgName"}}`, encodeURIComponent(String(orgName)))
                .replace(`{${"clusterName"}}`, encodeURIComponent(String(clusterName)));
            // use dummy base URL string because the URL constructor only accepts absolute URLs.
            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }

            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;

            // authentication BearerToken required
            // http bearer authentication required
            await setBearerAuthToObject(localVarHeaderParameter, configuration)

            // authentication DigestAuth required
            await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration)


    
            localVarHeaderParameter['Content-Type'] = 'application/json';

            setSearchParams(localVarUrlObj, localVarQueryParameter);
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
            localVarRequestOptions.data = serializeDataIfNeeded(rbmqAccountRequest, localVarRequestOptions, configuration)

            return {
                url: toPathString(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
        /**
         * Delete a RabbitMQ account
         * @summary Delete RabbitMQ account
         * @param {string} orgName name of the Org
         * @param {string} clusterName name of the Cluster
         * @param {string} accountName name of the Account
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        deleteRabbitAccount: async (orgName: string, clusterName: string, accountName: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
            // verify required parameter 'orgName' is not null or undefined
            assertParamExists('deleteRabbitAccount', 'orgName', orgName)
            // verify required parameter 'clusterName' is not null or undefined
            assertParamExists('deleteRabbitAccount', 'clusterName', clusterName)
            // verify required parameter 'accountName' is not null or undefined
            assertParamExists('deleteRabbitAccount', 'accountName', accountName)
            const localVarPath = `/admin/v1/data/rabbitmq/organizations/{orgName}/clusters/{clusterName}/accounts/{accountName}`
                .replace(`{${"orgName"}}`, encodeURIComponent(String(orgName)))
                .replace(`{${"clusterName"}}`, encodeURIComponent(String(clusterName)))
                .replace(`{${"accountName"}}`, encodeURIComponent(String(accountName)));
            // use dummy base URL string because the URL constructor only accepts absolute URLs.
            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }

            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;

            // authentication BearerToken required
            // http bearer authentication required
            await setBearerAuthToObject(localVarHeaderParameter, configuration)

            // authentication DigestAuth required
            await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration)


    
            setSearchParams(localVarUrlObj, localVarQueryParameter);
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};

            return {
                url: toPathString(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
        /**
         * List all RabbitMQ accounts
         * @summary List RabbitMQ accounts
         * @param {string} orgName name of the Org
         * @param {string} clusterName name of the Cluster
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        listRabbitAccounts: async (orgName: string, clusterName: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
            // verify required parameter 'orgName' is not null or undefined
            assertParamExists('listRabbitAccounts', 'orgName', orgName)
            // verify required parameter 'clusterName' is not null or undefined
            assertParamExists('listRabbitAccounts', 'clusterName', clusterName)
            const localVarPath = `/admin/v1/data/rabbitmq/organizations/{orgName}/clusters/{clusterName}/accounts`
                .replace(`{${"orgName"}}`, encodeURIComponent(String(orgName)))
                .replace(`{${"clusterName"}}`, encodeURIComponent(String(clusterName)));
            // use dummy base URL string because the URL constructor only accepts absolute URLs.
            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }

            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;

            // authentication BearerToken required
            // http bearer authentication required
            await setBearerAuthToObject(localVarHeaderParameter, configuration)

            // authentication DigestAuth required
            await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration)


    
            setSearchParams(localVarUrlObj, localVarQueryParameter);
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};

            return {
                url: toPathString(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
        /**
         * List RabbitMQ exchanges
         * @summary List RabbitMQ exchanges
         * @param {string} orgName name of the Org
         * @param {string} clusterName name of the Cluster
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        listRabbitExchanges: async (orgName: string, clusterName: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
            // verify required parameter 'orgName' is not null or undefined
            assertParamExists('listRabbitExchanges', 'orgName', orgName)
            // verify required parameter 'clusterName' is not null or undefined
            assertParamExists('listRabbitExchanges', 'clusterName', clusterName)
            const localVarPath = `/admin/v1/data/rabbitmq/organizations/{orgName}/clusters/{clusterName}/exchanges`
                .replace(`{${"orgName"}}`, encodeURIComponent(String(orgName)))
                .replace(`{${"clusterName"}}`, encodeURIComponent(String(clusterName)));
            // use dummy base URL string because the URL constructor only accepts absolute URLs.
            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }

            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;

            // authentication BearerToken required
            // http bearer authentication required
            await setBearerAuthToObject(localVarHeaderParameter, configuration)

            // authentication DigestAuth required
            await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration)


    
            setSearchParams(localVarUrlObj, localVarQueryParameter);
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};

            return {
                url: toPathString(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
        /**
         * List RabbitMQ vhosts
         * @summary List RabbitMQ vhosts
         * @param {string} orgName name of the Org
         * @param {string} clusterName name of the Cluster
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        listRabbitVHosts: async (orgName: string, clusterName: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
            // verify required parameter 'orgName' is not null or undefined
            assertParamExists('listRabbitVHosts', 'orgName', orgName)
            // verify required parameter 'clusterName' is not null or undefined
            assertParamExists('listRabbitVHosts', 'clusterName', clusterName)
            const localVarPath = `/admin/v1/data/rabbitmq/organizations/{orgName}/clusters/{clusterName}/vhosts`
                .replace(`{${"orgName"}}`, encodeURIComponent(String(orgName)))
                .replace(`{${"clusterName"}}`, encodeURIComponent(String(clusterName)));
            // use dummy base URL string because the URL constructor only accepts absolute URLs.
            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }

            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;

            // authentication BearerToken required
            // http bearer authentication required
            await setBearerAuthToObject(localVarHeaderParameter, configuration)

            // authentication DigestAuth required
            await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration)


    
            setSearchParams(localVarUrlObj, localVarQueryParameter);
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};

            return {
                url: toPathString(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
        /**
         * Update a RabbitMQ account password
         * @summary Update RabbitMQ account password
         * @param {string} orgName name of the Org
         * @param {string} clusterName name of the Cluster
         * @param {string} accountName name of the Account
         * @param {RbmqUser} rbmqUser 
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        updateRabbitAccountPassword: async (orgName: string, clusterName: string, accountName: string, rbmqUser: RbmqUser, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
            // verify required parameter 'orgName' is not null or undefined
            assertParamExists('updateRabbitAccountPassword', 'orgName', orgName)
            // verify required parameter 'clusterName' is not null or undefined
            assertParamExists('updateRabbitAccountPassword', 'clusterName', clusterName)
            // verify required parameter 'accountName' is not null or undefined
            assertParamExists('updateRabbitAccountPassword', 'accountName', accountName)
            // verify required parameter 'rbmqUser' is not null or undefined
            assertParamExists('updateRabbitAccountPassword', 'rbmqUser', rbmqUser)
            const localVarPath = `/admin/v1/data/rabbitmq/organizations/{orgName}/clusters/{clusterName}/accounts/{accountName}`
                .replace(`{${"orgName"}}`, encodeURIComponent(String(orgName)))
                .replace(`{${"clusterName"}}`, encodeURIComponent(String(clusterName)))
                .replace(`{${"accountName"}}`, encodeURIComponent(String(accountName)));
            // use dummy base URL string because the URL constructor only accepts absolute URLs.
            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }

            const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;

            // authentication BearerToken required
            // http bearer authentication required
            await setBearerAuthToObject(localVarHeaderParameter, configuration)

            // authentication DigestAuth required
            await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration)


    
            localVarHeaderParameter['Content-Type'] = 'application/json';

            setSearchParams(localVarUrlObj, localVarQueryParameter);
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
            localVarRequestOptions.data = serializeDataIfNeeded(rbmqUser, localVarRequestOptions, configuration)

            return {
                url: toPathString(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
        /**
         * Update a RabbitMQ account privileges
         * @summary Update RabbitMQ account privileges
         * @param {string} orgName name of the Org
         * @param {string} clusterName name of the Cluster
         * @param {string} accountName name of the Account
         * @param {RbmqPermission} rbmqPermission 
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        updateRabbitAccountPrivileges: async (orgName: string, clusterName: string, accountName: string, rbmqPermission: RbmqPermission, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
            // verify required parameter 'orgName' is not null or undefined
            assertParamExists('updateRabbitAccountPrivileges', 'orgName', orgName)
            // verify required parameter 'clusterName' is not null or undefined
            assertParamExists('updateRabbitAccountPrivileges', 'clusterName', clusterName)
            // verify required parameter 'accountName' is not null or undefined
            assertParamExists('updateRabbitAccountPrivileges', 'accountName', accountName)
            // verify required parameter 'rbmqPermission' is not null or undefined
            assertParamExists('updateRabbitAccountPrivileges', 'rbmqPermission', rbmqPermission)
            const localVarPath = `/admin/v1/data/rabbitmq/organizations/{orgName}/clusters/{clusterName}/accounts/{accountName}/privileges`
                .replace(`{${"orgName"}}`, encodeURIComponent(String(orgName)))
                .replace(`{${"clusterName"}}`, encodeURIComponent(String(clusterName)))
                .replace(`{${"accountName"}}`, encodeURIComponent(String(accountName)));
            // use dummy base URL string because the URL constructor only accepts absolute URLs.
            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
            let baseOptions;
            if (configuration) {
                baseOptions = configuration.baseOptions;
            }

            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options};
            const localVarHeaderParameter = {} as any;
            const localVarQueryParameter = {} as any;

            // authentication BearerToken required
            // http bearer authentication required
            await setBearerAuthToObject(localVarHeaderParameter, configuration)

            // authentication DigestAuth required
            await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration)


    
            localVarHeaderParameter['Content-Type'] = 'application/json';

            setSearchParams(localVarUrlObj, localVarQueryParameter);
            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
            localVarRequestOptions.data = serializeDataIfNeeded(rbmqPermission, localVarRequestOptions, configuration)

            return {
                url: toPathString(localVarUrlObj),
                options: localVarRequestOptions,
            };
        },
    }
};

/**
 * RabbitMQApi - functional programming interface
 * @export
 */
export const RabbitMQApiFp = function(configuration?: Configuration) {
    const localVarAxiosParamCreator = RabbitMQApiAxiosParamCreator(configuration)
    return {
        /**
         * Create a new RabbitMQ account
         * @summary Create RabbitMQ account
         * @param {string} orgName name of the Org
         * @param {string} clusterName name of the Cluster
         * @param {RbmqAccountRequest} rbmqAccountRequest 
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async createRabbitAccount(orgName: string, clusterName: string, rbmqAccountRequest: RbmqAccountRequest, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
            const localVarAxiosArgs = await localVarAxiosParamCreator.createRabbitAccount(orgName, clusterName, rbmqAccountRequest, options);
            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
            const localVarOperationServerBasePath = operationServerMap['RabbitMQApi.createRabbitAccount']?.[localVarOperationServerIndex]?.url;
            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
        },
        /**
         * Delete a RabbitMQ account
         * @summary Delete RabbitMQ account
         * @param {string} orgName name of the Org
         * @param {string} clusterName name of the Cluster
         * @param {string} accountName name of the Account
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async deleteRabbitAccount(orgName: string, clusterName: string, accountName: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
            const localVarAxiosArgs = await localVarAxiosParamCreator.deleteRabbitAccount(orgName, clusterName, accountName, options);
            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
            const localVarOperationServerBasePath = operationServerMap['RabbitMQApi.deleteRabbitAccount']?.[localVarOperationServerIndex]?.url;
            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
        },
        /**
         * List all RabbitMQ accounts
         * @summary List RabbitMQ accounts
         * @param {string} orgName name of the Org
         * @param {string} clusterName name of the Cluster
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async listRabbitAccounts(orgName: string, clusterName: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<RbmqAccountsList>> {
            const localVarAxiosArgs = await localVarAxiosParamCreator.listRabbitAccounts(orgName, clusterName, options);
            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
            const localVarOperationServerBasePath = operationServerMap['RabbitMQApi.listRabbitAccounts']?.[localVarOperationServerIndex]?.url;
            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
        },
        /**
         * List RabbitMQ exchanges
         * @summary List RabbitMQ exchanges
         * @param {string} orgName name of the Org
         * @param {string} clusterName name of the Cluster
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async listRabbitExchanges(orgName: string, clusterName: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Array<RbmqExchange>>> {
            const localVarAxiosArgs = await localVarAxiosParamCreator.listRabbitExchanges(orgName, clusterName, options);
            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
            const localVarOperationServerBasePath = operationServerMap['RabbitMQApi.listRabbitExchanges']?.[localVarOperationServerIndex]?.url;
            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
        },
        /**
         * List RabbitMQ vhosts
         * @summary List RabbitMQ vhosts
         * @param {string} orgName name of the Org
         * @param {string} clusterName name of the Cluster
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async listRabbitVHosts(orgName: string, clusterName: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Array<RbmqVHost>>> {
            const localVarAxiosArgs = await localVarAxiosParamCreator.listRabbitVHosts(orgName, clusterName, options);
            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
            const localVarOperationServerBasePath = operationServerMap['RabbitMQApi.listRabbitVHosts']?.[localVarOperationServerIndex]?.url;
            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
        },
        /**
         * Update a RabbitMQ account password
         * @summary Update RabbitMQ account password
         * @param {string} orgName name of the Org
         * @param {string} clusterName name of the Cluster
         * @param {string} accountName name of the Account
         * @param {RbmqUser} rbmqUser 
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async updateRabbitAccountPassword(orgName: string, clusterName: string, accountName: string, rbmqUser: RbmqUser, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
            const localVarAxiosArgs = await localVarAxiosParamCreator.updateRabbitAccountPassword(orgName, clusterName, accountName, rbmqUser, options);
            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
            const localVarOperationServerBasePath = operationServerMap['RabbitMQApi.updateRabbitAccountPassword']?.[localVarOperationServerIndex]?.url;
            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
        },
        /**
         * Update a RabbitMQ account privileges
         * @summary Update RabbitMQ account privileges
         * @param {string} orgName name of the Org
         * @param {string} clusterName name of the Cluster
         * @param {string} accountName name of the Account
         * @param {RbmqPermission} rbmqPermission 
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        async updateRabbitAccountPrivileges(orgName: string, clusterName: string, accountName: string, rbmqPermission: RbmqPermission, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
            const localVarAxiosArgs = await localVarAxiosParamCreator.updateRabbitAccountPrivileges(orgName, clusterName, accountName, rbmqPermission, options);
            const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
            const localVarOperationServerBasePath = operationServerMap['RabbitMQApi.updateRabbitAccountPrivileges']?.[localVarOperationServerIndex]?.url;
            return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
        },
    }
};

/**
 * RabbitMQApi - factory interface
 * @export
 */
export const RabbitMQApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
    const localVarFp = RabbitMQApiFp(configuration)
    return {
        /**
         * Create a new RabbitMQ account
         * @summary Create RabbitMQ account
         * @param {RabbitMQApiCreateRabbitAccountRequest} requestParameters Request parameters.
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        createRabbitAccount(requestParameters: RabbitMQApiCreateRabbitAccountRequest, options?: RawAxiosRequestConfig): AxiosPromise<void> {
            return localVarFp.createRabbitAccount(requestParameters.orgName, requestParameters.clusterName, requestParameters.rbmqAccountRequest, options).then((request) => request(axios, basePath));
        },
        /**
         * Delete a RabbitMQ account
         * @summary Delete RabbitMQ account
         * @param {RabbitMQApiDeleteRabbitAccountRequest} requestParameters Request parameters.
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        deleteRabbitAccount(requestParameters: RabbitMQApiDeleteRabbitAccountRequest, options?: RawAxiosRequestConfig): AxiosPromise<void> {
            return localVarFp.deleteRabbitAccount(requestParameters.orgName, requestParameters.clusterName, requestParameters.accountName, options).then((request) => request(axios, basePath));
        },
        /**
         * List all RabbitMQ accounts
         * @summary List RabbitMQ accounts
         * @param {RabbitMQApiListRabbitAccountsRequest} requestParameters Request parameters.
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        listRabbitAccounts(requestParameters: RabbitMQApiListRabbitAccountsRequest, options?: RawAxiosRequestConfig): AxiosPromise<RbmqAccountsList> {
            return localVarFp.listRabbitAccounts(requestParameters.orgName, requestParameters.clusterName, options).then((request) => request(axios, basePath));
        },
        /**
         * List RabbitMQ exchanges
         * @summary List RabbitMQ exchanges
         * @param {RabbitMQApiListRabbitExchangesRequest} requestParameters Request parameters.
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        listRabbitExchanges(requestParameters: RabbitMQApiListRabbitExchangesRequest, options?: RawAxiosRequestConfig): AxiosPromise<Array<RbmqExchange>> {
            return localVarFp.listRabbitExchanges(requestParameters.orgName, requestParameters.clusterName, options).then((request) => request(axios, basePath));
        },
        /**
         * List RabbitMQ vhosts
         * @summary List RabbitMQ vhosts
         * @param {RabbitMQApiListRabbitVHostsRequest} requestParameters Request parameters.
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        listRabbitVHosts(requestParameters: RabbitMQApiListRabbitVHostsRequest, options?: RawAxiosRequestConfig): AxiosPromise<Array<RbmqVHost>> {
            return localVarFp.listRabbitVHosts(requestParameters.orgName, requestParameters.clusterName, options).then((request) => request(axios, basePath));
        },
        /**
         * Update a RabbitMQ account password
         * @summary Update RabbitMQ account password
         * @param {RabbitMQApiUpdateRabbitAccountPasswordRequest} requestParameters Request parameters.
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        updateRabbitAccountPassword(requestParameters: RabbitMQApiUpdateRabbitAccountPasswordRequest, options?: RawAxiosRequestConfig): AxiosPromise<void> {
            return localVarFp.updateRabbitAccountPassword(requestParameters.orgName, requestParameters.clusterName, requestParameters.accountName, requestParameters.rbmqUser, options).then((request) => request(axios, basePath));
        },
        /**
         * Update a RabbitMQ account privileges
         * @summary Update RabbitMQ account privileges
         * @param {RabbitMQApiUpdateRabbitAccountPrivilegesRequest} requestParameters Request parameters.
         * @param {*} [options] Override http request option.
         * @throws {RequiredError}
         */
        updateRabbitAccountPrivileges(requestParameters: RabbitMQApiUpdateRabbitAccountPrivilegesRequest, options?: RawAxiosRequestConfig): AxiosPromise<void> {
            return localVarFp.updateRabbitAccountPrivileges(requestParameters.orgName, requestParameters.clusterName, requestParameters.accountName, requestParameters.rbmqPermission, options).then((request) => request(axios, basePath));
        },
    };
};

/**
 * RabbitMQApi - interface
 * @export
 * @interface RabbitMQApi
 */
export interface RabbitMQApiInterface {
    /**
     * Create a new RabbitMQ account
     * @summary Create RabbitMQ account
     * @param {RabbitMQApiCreateRabbitAccountRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof RabbitMQApiInterface
     */
    createRabbitAccount(requestParameters: RabbitMQApiCreateRabbitAccountRequest, options?: RawAxiosRequestConfig): AxiosPromise<void>;

    /**
     * Delete a RabbitMQ account
     * @summary Delete RabbitMQ account
     * @param {RabbitMQApiDeleteRabbitAccountRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof RabbitMQApiInterface
     */
    deleteRabbitAccount(requestParameters: RabbitMQApiDeleteRabbitAccountRequest, options?: RawAxiosRequestConfig): AxiosPromise<void>;

    /**
     * List all RabbitMQ accounts
     * @summary List RabbitMQ accounts
     * @param {RabbitMQApiListRabbitAccountsRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof RabbitMQApiInterface
     */
    listRabbitAccounts(requestParameters: RabbitMQApiListRabbitAccountsRequest, options?: RawAxiosRequestConfig): AxiosPromise<RbmqAccountsList>;

    /**
     * List RabbitMQ exchanges
     * @summary List RabbitMQ exchanges
     * @param {RabbitMQApiListRabbitExchangesRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof RabbitMQApiInterface
     */
    listRabbitExchanges(requestParameters: RabbitMQApiListRabbitExchangesRequest, options?: RawAxiosRequestConfig): AxiosPromise<Array<RbmqExchange>>;

    /**
     * List RabbitMQ vhosts
     * @summary List RabbitMQ vhosts
     * @param {RabbitMQApiListRabbitVHostsRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof RabbitMQApiInterface
     */
    listRabbitVHosts(requestParameters: RabbitMQApiListRabbitVHostsRequest, options?: RawAxiosRequestConfig): AxiosPromise<Array<RbmqVHost>>;

    /**
     * Update a RabbitMQ account password
     * @summary Update RabbitMQ account password
     * @param {RabbitMQApiUpdateRabbitAccountPasswordRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof RabbitMQApiInterface
     */
    updateRabbitAccountPassword(requestParameters: RabbitMQApiUpdateRabbitAccountPasswordRequest, options?: RawAxiosRequestConfig): AxiosPromise<void>;

    /**
     * Update a RabbitMQ account privileges
     * @summary Update RabbitMQ account privileges
     * @param {RabbitMQApiUpdateRabbitAccountPrivilegesRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof RabbitMQApiInterface
     */
    updateRabbitAccountPrivileges(requestParameters: RabbitMQApiUpdateRabbitAccountPrivilegesRequest, options?: RawAxiosRequestConfig): AxiosPromise<void>;

}

/**
 * Request parameters for createRabbitAccount operation in RabbitMQApi.
 * @export
 * @interface RabbitMQApiCreateRabbitAccountRequest
 */
export interface RabbitMQApiCreateRabbitAccountRequest {
    /**
     * name of the Org
     * @type {string}
     * @memberof RabbitMQApiCreateRabbitAccount
     */
    readonly orgName: string

    /**
     * name of the Cluster
     * @type {string}
     * @memberof RabbitMQApiCreateRabbitAccount
     */
    readonly clusterName: string

    /**
     * 
     * @type {RbmqAccountRequest}
     * @memberof RabbitMQApiCreateRabbitAccount
     */
    readonly rbmqAccountRequest: RbmqAccountRequest
}

/**
 * Request parameters for deleteRabbitAccount operation in RabbitMQApi.
 * @export
 * @interface RabbitMQApiDeleteRabbitAccountRequest
 */
export interface RabbitMQApiDeleteRabbitAccountRequest {
    /**
     * name of the Org
     * @type {string}
     * @memberof RabbitMQApiDeleteRabbitAccount
     */
    readonly orgName: string

    /**
     * name of the Cluster
     * @type {string}
     * @memberof RabbitMQApiDeleteRabbitAccount
     */
    readonly clusterName: string

    /**
     * name of the Account
     * @type {string}
     * @memberof RabbitMQApiDeleteRabbitAccount
     */
    readonly accountName: string
}

/**
 * Request parameters for listRabbitAccounts operation in RabbitMQApi.
 * @export
 * @interface RabbitMQApiListRabbitAccountsRequest
 */
export interface RabbitMQApiListRabbitAccountsRequest {
    /**
     * name of the Org
     * @type {string}
     * @memberof RabbitMQApiListRabbitAccounts
     */
    readonly orgName: string

    /**
     * name of the Cluster
     * @type {string}
     * @memberof RabbitMQApiListRabbitAccounts
     */
    readonly clusterName: string
}

/**
 * Request parameters for listRabbitExchanges operation in RabbitMQApi.
 * @export
 * @interface RabbitMQApiListRabbitExchangesRequest
 */
export interface RabbitMQApiListRabbitExchangesRequest {
    /**
     * name of the Org
     * @type {string}
     * @memberof RabbitMQApiListRabbitExchanges
     */
    readonly orgName: string

    /**
     * name of the Cluster
     * @type {string}
     * @memberof RabbitMQApiListRabbitExchanges
     */
    readonly clusterName: string
}

/**
 * Request parameters for listRabbitVHosts operation in RabbitMQApi.
 * @export
 * @interface RabbitMQApiListRabbitVHostsRequest
 */
export interface RabbitMQApiListRabbitVHostsRequest {
    /**
     * name of the Org
     * @type {string}
     * @memberof RabbitMQApiListRabbitVHosts
     */
    readonly orgName: string

    /**
     * name of the Cluster
     * @type {string}
     * @memberof RabbitMQApiListRabbitVHosts
     */
    readonly clusterName: string
}

/**
 * Request parameters for updateRabbitAccountPassword operation in RabbitMQApi.
 * @export
 * @interface RabbitMQApiUpdateRabbitAccountPasswordRequest
 */
export interface RabbitMQApiUpdateRabbitAccountPasswordRequest {
    /**
     * name of the Org
     * @type {string}
     * @memberof RabbitMQApiUpdateRabbitAccountPassword
     */
    readonly orgName: string

    /**
     * name of the Cluster
     * @type {string}
     * @memberof RabbitMQApiUpdateRabbitAccountPassword
     */
    readonly clusterName: string

    /**
     * name of the Account
     * @type {string}
     * @memberof RabbitMQApiUpdateRabbitAccountPassword
     */
    readonly accountName: string

    /**
     * 
     * @type {RbmqUser}
     * @memberof RabbitMQApiUpdateRabbitAccountPassword
     */
    readonly rbmqUser: RbmqUser
}

/**
 * Request parameters for updateRabbitAccountPrivileges operation in RabbitMQApi.
 * @export
 * @interface RabbitMQApiUpdateRabbitAccountPrivilegesRequest
 */
export interface RabbitMQApiUpdateRabbitAccountPrivilegesRequest {
    /**
     * name of the Org
     * @type {string}
     * @memberof RabbitMQApiUpdateRabbitAccountPrivileges
     */
    readonly orgName: string

    /**
     * name of the Cluster
     * @type {string}
     * @memberof RabbitMQApiUpdateRabbitAccountPrivileges
     */
    readonly clusterName: string

    /**
     * name of the Account
     * @type {string}
     * @memberof RabbitMQApiUpdateRabbitAccountPrivileges
     */
    readonly accountName: string

    /**
     * 
     * @type {RbmqPermission}
     * @memberof RabbitMQApiUpdateRabbitAccountPrivileges
     */
    readonly rbmqPermission: RbmqPermission
}

/**
 * RabbitMQApi - object-oriented interface
 * @export
 * @class RabbitMQApi
 * @extends {BaseAPI}
 */
export class RabbitMQApi extends BaseAPI implements RabbitMQApiInterface {
    /**
     * Create a new RabbitMQ account
     * @summary Create RabbitMQ account
     * @param {RabbitMQApiCreateRabbitAccountRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof RabbitMQApi
     */
    public createRabbitAccount(requestParameters: RabbitMQApiCreateRabbitAccountRequest, options?: RawAxiosRequestConfig) {
        return RabbitMQApiFp(this.configuration).createRabbitAccount(requestParameters.orgName, requestParameters.clusterName, requestParameters.rbmqAccountRequest, options).then((request) => request(this.axios, this.basePath));
    }

    /**
     * Delete a RabbitMQ account
     * @summary Delete RabbitMQ account
     * @param {RabbitMQApiDeleteRabbitAccountRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof RabbitMQApi
     */
    public deleteRabbitAccount(requestParameters: RabbitMQApiDeleteRabbitAccountRequest, options?: RawAxiosRequestConfig) {
        return RabbitMQApiFp(this.configuration).deleteRabbitAccount(requestParameters.orgName, requestParameters.clusterName, requestParameters.accountName, options).then((request) => request(this.axios, this.basePath));
    }

    /**
     * List all RabbitMQ accounts
     * @summary List RabbitMQ accounts
     * @param {RabbitMQApiListRabbitAccountsRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof RabbitMQApi
     */
    public listRabbitAccounts(requestParameters: RabbitMQApiListRabbitAccountsRequest, options?: RawAxiosRequestConfig) {
        return RabbitMQApiFp(this.configuration).listRabbitAccounts(requestParameters.orgName, requestParameters.clusterName, options).then((request) => request(this.axios, this.basePath));
    }

    /**
     * List RabbitMQ exchanges
     * @summary List RabbitMQ exchanges
     * @param {RabbitMQApiListRabbitExchangesRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof RabbitMQApi
     */
    public listRabbitExchanges(requestParameters: RabbitMQApiListRabbitExchangesRequest, options?: RawAxiosRequestConfig) {
        return RabbitMQApiFp(this.configuration).listRabbitExchanges(requestParameters.orgName, requestParameters.clusterName, options).then((request) => request(this.axios, this.basePath));
    }

    /**
     * List RabbitMQ vhosts
     * @summary List RabbitMQ vhosts
     * @param {RabbitMQApiListRabbitVHostsRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof RabbitMQApi
     */
    public listRabbitVHosts(requestParameters: RabbitMQApiListRabbitVHostsRequest, options?: RawAxiosRequestConfig) {
        return RabbitMQApiFp(this.configuration).listRabbitVHosts(requestParameters.orgName, requestParameters.clusterName, options).then((request) => request(this.axios, this.basePath));
    }

    /**
     * Update a RabbitMQ account password
     * @summary Update RabbitMQ account password
     * @param {RabbitMQApiUpdateRabbitAccountPasswordRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof RabbitMQApi
     */
    public updateRabbitAccountPassword(requestParameters: RabbitMQApiUpdateRabbitAccountPasswordRequest, options?: RawAxiosRequestConfig) {
        return RabbitMQApiFp(this.configuration).updateRabbitAccountPassword(requestParameters.orgName, requestParameters.clusterName, requestParameters.accountName, requestParameters.rbmqUser, options).then((request) => request(this.axios, this.basePath));
    }

    /**
     * Update a RabbitMQ account privileges
     * @summary Update RabbitMQ account privileges
     * @param {RabbitMQApiUpdateRabbitAccountPrivilegesRequest} requestParameters Request parameters.
     * @param {*} [options] Override http request option.
     * @throws {RequiredError}
     * @memberof RabbitMQApi
     */
    public updateRabbitAccountPrivileges(requestParameters: RabbitMQApiUpdateRabbitAccountPrivilegesRequest, options?: RawAxiosRequestConfig) {
        return RabbitMQApiFp(this.configuration).updateRabbitAccountPrivileges(requestParameters.orgName, requestParameters.clusterName, requestParameters.accountName, requestParameters.rbmqPermission, options).then((request) => request(this.axios, this.basePath));
    }
}

