// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. import type { MongoClusterManagementContext as Client } from "../index.js"; import type { FirewallRule, _FirewallRuleListResult } from "../../models/models.js"; import { errorResponseDeserializer, firewallRuleSerializer, firewallRuleDeserializer, _firewallRuleListResultDeserializer, } from "../../models/models.js"; import type { PagedAsyncIterableIterator } from "../../static-helpers/pagingHelpers.js"; import { buildPagedAsyncIterator } from "../../static-helpers/pagingHelpers.js"; import { getLongRunningPoller } from "../../static-helpers/pollingHelpers.js"; import { expandUrlTemplate } from "../../static-helpers/urlTemplate.js"; import type { FirewallRulesListByMongoClusterOptionalParams, FirewallRulesDeleteOptionalParams, FirewallRulesCreateOrUpdateOptionalParams, FirewallRulesGetOptionalParams, } from "./options.js"; import type { StreamableMethod, PathUncheckedResponse } from "@azure-rest/core-client"; import { createRestError, operationOptionsToRequestParameters } from "@azure-rest/core-client"; import type { PollerLike, OperationState } from "@azure/core-lro"; export function _listByMongoClusterSend( context: Client, resourceGroupName: string, mongoClusterName: string, options: FirewallRulesListByMongoClusterOptionalParams = { requestOptions: {} }, ): StreamableMethod { const path = expandUrlTemplate( "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DocumentDB/mongoClusters/{mongoClusterName}/firewallRules{?api%2Dversion}", { subscriptionId: context.subscriptionId, resourceGroupName: resourceGroupName, mongoClusterName: mongoClusterName, "api%2Dversion": context.apiVersion ?? "2026-02-01-preview", }, { allowReserved: options?.requestOptions?.skipUrlEncoding, }, ); return context.path(path).get({ ...operationOptionsToRequestParameters(options), headers: { accept: "application/json", ...options.requestOptions?.headers }, }); } export async function _listByMongoClusterDeserialize( result: PathUncheckedResponse, ): Promise<_FirewallRuleListResult> { const expectedStatuses = ["200"]; if (!expectedStatuses.includes(result.status)) { const error = createRestError(result); error.details = errorResponseDeserializer(result.body); throw error; } return _firewallRuleListResultDeserializer(result.body); } /** List all the firewall rules in a given mongo cluster. */ export function listByMongoCluster( context: Client, resourceGroupName: string, mongoClusterName: string, options: FirewallRulesListByMongoClusterOptionalParams = { requestOptions: {} }, ): PagedAsyncIterableIterator { return buildPagedAsyncIterator( context, () => _listByMongoClusterSend(context, resourceGroupName, mongoClusterName, options), _listByMongoClusterDeserialize, ["200"], { itemName: "value", nextLinkName: "nextLink", apiVersion: context.apiVersion ?? "2026-02-01-preview", }, ); } export function _$deleteSend( context: Client, resourceGroupName: string, mongoClusterName: string, firewallRuleName: string, options: FirewallRulesDeleteOptionalParams = { requestOptions: {} }, ): StreamableMethod { const path = expandUrlTemplate( "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DocumentDB/mongoClusters/{mongoClusterName}/firewallRules/{firewallRuleName}{?api%2Dversion}", { subscriptionId: context.subscriptionId, resourceGroupName: resourceGroupName, mongoClusterName: mongoClusterName, firewallRuleName: firewallRuleName, "api%2Dversion": context.apiVersion ?? "2026-02-01-preview", }, { allowReserved: options?.requestOptions?.skipUrlEncoding, }, ); return context.path(path).delete({ ...operationOptionsToRequestParameters(options) }); } export async function _$deleteDeserialize(result: PathUncheckedResponse): Promise { const expectedStatuses = ["202", "204", "200"]; if (!expectedStatuses.includes(result.status)) { const error = createRestError(result); error.details = errorResponseDeserializer(result.body); throw error; } return; } /** Deletes a mongo cluster firewall rule. */ export function $delete( context: Client, resourceGroupName: string, mongoClusterName: string, firewallRuleName: string, options: FirewallRulesDeleteOptionalParams = { requestOptions: {} }, ): PollerLike, void> { return getLongRunningPoller(context, _$deleteDeserialize, ["202", "204", "200"], { updateIntervalInMs: options?.updateIntervalInMs, abortSignal: options?.abortSignal, getInitialResponse: () => _$deleteSend(context, resourceGroupName, mongoClusterName, firewallRuleName, options), resourceLocationConfig: "location", apiVersion: context.apiVersion ?? "2026-02-01-preview", }) as PollerLike, void>; } export function _createOrUpdateSend( context: Client, resourceGroupName: string, mongoClusterName: string, firewallRuleName: string, resource: FirewallRule, options: FirewallRulesCreateOrUpdateOptionalParams = { requestOptions: {} }, ): StreamableMethod { const path = expandUrlTemplate( "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DocumentDB/mongoClusters/{mongoClusterName}/firewallRules/{firewallRuleName}{?api%2Dversion}", { subscriptionId: context.subscriptionId, resourceGroupName: resourceGroupName, mongoClusterName: mongoClusterName, firewallRuleName: firewallRuleName, "api%2Dversion": context.apiVersion ?? "2026-02-01-preview", }, { allowReserved: options?.requestOptions?.skipUrlEncoding, }, ); return context.path(path).put({ ...operationOptionsToRequestParameters(options), contentType: "application/json", headers: { accept: "application/json", ...options.requestOptions?.headers }, body: firewallRuleSerializer(resource), }); } export async function _createOrUpdateDeserialize( result: PathUncheckedResponse, ): Promise { const expectedStatuses = ["200", "201", "202"]; if (!expectedStatuses.includes(result.status)) { const error = createRestError(result); error.details = errorResponseDeserializer(result.body); throw error; } return firewallRuleDeserializer(result.body); } /** Creates a new firewall rule or updates an existing firewall rule on a mongo cluster. */ export function createOrUpdate( context: Client, resourceGroupName: string, mongoClusterName: string, firewallRuleName: string, resource: FirewallRule, options: FirewallRulesCreateOrUpdateOptionalParams = { requestOptions: {} }, ): PollerLike, FirewallRule> { return getLongRunningPoller(context, _createOrUpdateDeserialize, ["200", "201", "202"], { updateIntervalInMs: options?.updateIntervalInMs, abortSignal: options?.abortSignal, getInitialResponse: () => _createOrUpdateSend( context, resourceGroupName, mongoClusterName, firewallRuleName, resource, options, ), resourceLocationConfig: "azure-async-operation", apiVersion: context.apiVersion ?? "2026-02-01-preview", }) as PollerLike, FirewallRule>; } export function _getSend( context: Client, resourceGroupName: string, mongoClusterName: string, firewallRuleName: string, options: FirewallRulesGetOptionalParams = { requestOptions: {} }, ): StreamableMethod { const path = expandUrlTemplate( "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DocumentDB/mongoClusters/{mongoClusterName}/firewallRules/{firewallRuleName}{?api%2Dversion}", { subscriptionId: context.subscriptionId, resourceGroupName: resourceGroupName, mongoClusterName: mongoClusterName, firewallRuleName: firewallRuleName, "api%2Dversion": context.apiVersion ?? "2026-02-01-preview", }, { allowReserved: options?.requestOptions?.skipUrlEncoding, }, ); return context.path(path).get({ ...operationOptionsToRequestParameters(options), headers: { accept: "application/json", ...options.requestOptions?.headers }, }); } export async function _getDeserialize(result: PathUncheckedResponse): Promise { const expectedStatuses = ["200"]; if (!expectedStatuses.includes(result.status)) { const error = createRestError(result); error.details = errorResponseDeserializer(result.body); throw error; } return firewallRuleDeserializer(result.body); } /** Gets information about a mongo cluster firewall rule. */ export async function get( context: Client, resourceGroupName: string, mongoClusterName: string, firewallRuleName: string, options: FirewallRulesGetOptionalParams = { requestOptions: {} }, ): Promise { const result = await _getSend( context, resourceGroupName, mongoClusterName, firewallRuleName, options, ); return _getDeserialize(result); }