// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. // #nullable disable using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Threading; using System.Threading.Tasks; using Azure; using Azure.Core; using Azure.Core.Pipeline; using Azure.ResourceManager; using Azure.ResourceManager.Resources; namespace Azure.ResourceManager.MongoCluster { /// /// A class representing a collection of and their operations. /// Each in the collection will belong to the same instance of . /// To get a instance call the GetMongoClusters method from an instance of . /// public partial class MongoClusterCollection : ArmCollection, IEnumerable, IAsyncEnumerable { private readonly ClientDiagnostics _mongoClustersClientDiagnostics; private readonly MongoClusters _mongoClustersRestClient; private readonly ClientDiagnostics _privateLinksClientDiagnostics; private readonly PrivateLinks _privateLinksRestClient; private readonly ClientDiagnostics _replicasClientDiagnostics; private readonly Replicas _replicasRestClient; /// Initializes a new instance of MongoClusterCollection for mocking. protected MongoClusterCollection() { } /// Initializes a new instance of class. /// The client parameters to use in these operations. /// The identifier of the resource that is the target of operations. internal MongoClusterCollection(ArmClient client, ResourceIdentifier id) : base(client, id) { TryGetApiVersion(MongoClusterResource.ResourceType, out string mongoClusterApiVersion); _mongoClustersClientDiagnostics = new ClientDiagnostics("Azure.ResourceManager.MongoCluster", MongoClusterResource.ResourceType.Namespace, Diagnostics); _mongoClustersRestClient = new MongoClusters(_mongoClustersClientDiagnostics, Pipeline, Endpoint, mongoClusterApiVersion ?? "2026-02-01-preview"); _privateLinksClientDiagnostics = new ClientDiagnostics("Azure.ResourceManager.MongoCluster", MongoClusterResource.ResourceType.Namespace, Diagnostics); _privateLinksRestClient = new PrivateLinks(_privateLinksClientDiagnostics, Pipeline, Endpoint, mongoClusterApiVersion ?? "2026-02-01-preview"); _replicasClientDiagnostics = new ClientDiagnostics("Azure.ResourceManager.MongoCluster", MongoClusterResource.ResourceType.Namespace, Diagnostics); _replicasRestClient = new Replicas(_replicasClientDiagnostics, Pipeline, Endpoint, mongoClusterApiVersion ?? "2026-02-01-preview"); ValidateResourceId(id); } /// [Conditional("DEBUG")] internal static void ValidateResourceId(ResourceIdentifier id) { if (id.ResourceType != ResourceGroupResource.ResourceType) { throw new ArgumentException(string.Format("Invalid resource type {0} expected {1}", id.ResourceType, ResourceGroupResource.ResourceType), nameof(id)); } } /// /// Create or update a mongo cluster. Update overwrites all properties for the resource. To only modify some of the properties, use PATCH. /// /// /// Request Path. /// /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DocumentDB/mongoClusters/{mongoClusterName}. /// /// /// Operation Id. /// MongoClusters_CreateOrUpdate. /// /// /// Default Api Version. /// 2026-02-01-preview. /// /// /// /// if the method should wait to return until the long-running operation has completed on the service; if it should return after starting the operation. For more information on long-running operations, please see Azure.Core Long-Running Operation samples. /// The name of the mongo cluster. /// Resource create parameters. /// The cancellation token to use. /// or is null. /// is an empty string, and was expected to be non-empty. public virtual async Task> CreateOrUpdateAsync(WaitUntil waitUntil, string mongoClusterName, MongoClusterData data, CancellationToken cancellationToken = default) { Argument.AssertNotNullOrEmpty(mongoClusterName, nameof(mongoClusterName)); Argument.AssertNotNull(data, nameof(data)); using DiagnosticScope scope = _mongoClustersClientDiagnostics.CreateScope("MongoClusterCollection.CreateOrUpdate"); scope.Start(); try { RequestContext context = new RequestContext { CancellationToken = cancellationToken }; HttpMessage message = _mongoClustersRestClient.CreateCreateOrUpdateRequest(Guid.Parse(Id.SubscriptionId), Id.ResourceGroupName, mongoClusterName, MongoClusterData.ToRequestContent(data), context); Response response = await Pipeline.ProcessMessageAsync(message, context).ConfigureAwait(false); MongoClusterArmOperation operation = new MongoClusterArmOperation( new MongoClusterOperationSource(Client), _mongoClustersClientDiagnostics, Pipeline, message.Request, response, OperationFinalStateVia.OriginalUri); if (waitUntil == WaitUntil.Completed) { await operation.WaitForCompletionAsync(cancellationToken).ConfigureAwait(false); } return operation; } catch (Exception e) { scope.Failed(e); throw; } } /// /// Create or update a mongo cluster. Update overwrites all properties for the resource. To only modify some of the properties, use PATCH. /// /// /// Request Path. /// /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DocumentDB/mongoClusters/{mongoClusterName}. /// /// /// Operation Id. /// MongoClusters_CreateOrUpdate. /// /// /// Default Api Version. /// 2026-02-01-preview. /// /// /// /// if the method should wait to return until the long-running operation has completed on the service; if it should return after starting the operation. For more information on long-running operations, please see Azure.Core Long-Running Operation samples. /// The name of the mongo cluster. /// Resource create parameters. /// The cancellation token to use. /// or is null. /// is an empty string, and was expected to be non-empty. public virtual ArmOperation CreateOrUpdate(WaitUntil waitUntil, string mongoClusterName, MongoClusterData data, CancellationToken cancellationToken = default) { Argument.AssertNotNullOrEmpty(mongoClusterName, nameof(mongoClusterName)); Argument.AssertNotNull(data, nameof(data)); using DiagnosticScope scope = _mongoClustersClientDiagnostics.CreateScope("MongoClusterCollection.CreateOrUpdate"); scope.Start(); try { RequestContext context = new RequestContext { CancellationToken = cancellationToken }; HttpMessage message = _mongoClustersRestClient.CreateCreateOrUpdateRequest(Guid.Parse(Id.SubscriptionId), Id.ResourceGroupName, mongoClusterName, MongoClusterData.ToRequestContent(data), context); Response response = Pipeline.ProcessMessage(message, context); MongoClusterArmOperation operation = new MongoClusterArmOperation( new MongoClusterOperationSource(Client), _mongoClustersClientDiagnostics, Pipeline, message.Request, response, OperationFinalStateVia.OriginalUri); if (waitUntil == WaitUntil.Completed) { operation.WaitForCompletion(cancellationToken); } return operation; } catch (Exception e) { scope.Failed(e); throw; } } /// /// Gets information about a mongo cluster. /// /// /// Request Path. /// /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DocumentDB/mongoClusters/{mongoClusterName}. /// /// /// Operation Id. /// MongoClusters_Get. /// /// /// Default Api Version. /// 2026-02-01-preview. /// /// /// /// The name of the mongo cluster. /// The cancellation token to use. /// is null. /// is an empty string, and was expected to be non-empty. public virtual async Task> GetAsync(string mongoClusterName, CancellationToken cancellationToken = default) { Argument.AssertNotNullOrEmpty(mongoClusterName, nameof(mongoClusterName)); using DiagnosticScope scope = _mongoClustersClientDiagnostics.CreateScope("MongoClusterCollection.Get"); scope.Start(); try { RequestContext context = new RequestContext { CancellationToken = cancellationToken }; HttpMessage message = _mongoClustersRestClient.CreateGetRequest(Guid.Parse(Id.SubscriptionId), Id.ResourceGroupName, mongoClusterName, context); Response result = await Pipeline.ProcessMessageAsync(message, context).ConfigureAwait(false); Response response = Response.FromValue(MongoClusterData.FromResponse(result), result); if (response.Value == null) { throw new RequestFailedException(response.GetRawResponse()); } return Response.FromValue(new MongoClusterResource(Client, response.Value), response.GetRawResponse()); } catch (Exception e) { scope.Failed(e); throw; } } /// /// Gets information about a mongo cluster. /// /// /// Request Path. /// /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DocumentDB/mongoClusters/{mongoClusterName}. /// /// /// Operation Id. /// MongoClusters_Get. /// /// /// Default Api Version. /// 2026-02-01-preview. /// /// /// /// The name of the mongo cluster. /// The cancellation token to use. /// is null. /// is an empty string, and was expected to be non-empty. public virtual Response Get(string mongoClusterName, CancellationToken cancellationToken = default) { Argument.AssertNotNullOrEmpty(mongoClusterName, nameof(mongoClusterName)); using DiagnosticScope scope = _mongoClustersClientDiagnostics.CreateScope("MongoClusterCollection.Get"); scope.Start(); try { RequestContext context = new RequestContext { CancellationToken = cancellationToken }; HttpMessage message = _mongoClustersRestClient.CreateGetRequest(Guid.Parse(Id.SubscriptionId), Id.ResourceGroupName, mongoClusterName, context); Response result = Pipeline.ProcessMessage(message, context); Response response = Response.FromValue(MongoClusterData.FromResponse(result), result); if (response.Value == null) { throw new RequestFailedException(response.GetRawResponse()); } return Response.FromValue(new MongoClusterResource(Client, response.Value), response.GetRawResponse()); } catch (Exception e) { scope.Failed(e); throw; } } /// /// List all the mongo clusters in a given resource group. /// /// /// Request Path. /// /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DocumentDB/mongoClusters. /// /// /// Operation Id. /// MongoClusters_ListByResourceGroup. /// /// /// Default Api Version. /// 2026-02-01-preview. /// /// /// /// The cancellation token to use. /// A collection of that may take multiple service requests to iterate over. public virtual AsyncPageable GetAllAsync(CancellationToken cancellationToken = default) { RequestContext context = new RequestContext { CancellationToken = cancellationToken }; return new AsyncPageableWrapper(new MongoClustersGetByResourceGroupAsyncCollectionResultOfT(_mongoClustersRestClient, Guid.Parse(Id.SubscriptionId), Id.ResourceGroupName, context, "MongoClusterCollection.GetAll"), data => new MongoClusterResource(Client, data)); } /// /// List all the mongo clusters in a given resource group. /// /// /// Request Path. /// /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DocumentDB/mongoClusters. /// /// /// Operation Id. /// MongoClusters_ListByResourceGroup. /// /// /// Default Api Version. /// 2026-02-01-preview. /// /// /// /// The cancellation token to use. /// A collection of that may take multiple service requests to iterate over. public virtual Pageable GetAll(CancellationToken cancellationToken = default) { RequestContext context = new RequestContext { CancellationToken = cancellationToken }; return new PageableWrapper(new MongoClustersGetByResourceGroupCollectionResultOfT(_mongoClustersRestClient, Guid.Parse(Id.SubscriptionId), Id.ResourceGroupName, context, "MongoClusterCollection.GetAll"), data => new MongoClusterResource(Client, data)); } /// /// Checks to see if the resource exists in azure. /// /// /// Request Path. /// /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DocumentDB/mongoClusters/{mongoClusterName}. /// /// /// Operation Id. /// MongoClusters_Get. /// /// /// Default Api Version. /// 2026-02-01-preview. /// /// /// /// The name of the mongo cluster. /// The cancellation token to use. /// is null. /// is an empty string, and was expected to be non-empty. public virtual async Task> ExistsAsync(string mongoClusterName, CancellationToken cancellationToken = default) { Argument.AssertNotNullOrEmpty(mongoClusterName, nameof(mongoClusterName)); using DiagnosticScope scope = _mongoClustersClientDiagnostics.CreateScope("MongoClusterCollection.Exists"); scope.Start(); try { RequestContext context = new RequestContext { CancellationToken = cancellationToken }; HttpMessage message = _mongoClustersRestClient.CreateGetRequest(Guid.Parse(Id.SubscriptionId), Id.ResourceGroupName, mongoClusterName, context); await Pipeline.SendAsync(message, context.CancellationToken).ConfigureAwait(false); Response result = message.Response; Response response = default; switch (result.Status) { case 200: response = Response.FromValue(MongoClusterData.FromResponse(result), result); break; case 404: response = Response.FromValue((MongoClusterData)null, result); break; default: throw new RequestFailedException(result); } return Response.FromValue(response.Value != null, response.GetRawResponse()); } catch (Exception e) { scope.Failed(e); throw; } } /// /// Checks to see if the resource exists in azure. /// /// /// Request Path. /// /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DocumentDB/mongoClusters/{mongoClusterName}. /// /// /// Operation Id. /// MongoClusters_Get. /// /// /// Default Api Version. /// 2026-02-01-preview. /// /// /// /// The name of the mongo cluster. /// The cancellation token to use. /// is null. /// is an empty string, and was expected to be non-empty. public virtual Response Exists(string mongoClusterName, CancellationToken cancellationToken = default) { Argument.AssertNotNullOrEmpty(mongoClusterName, nameof(mongoClusterName)); using DiagnosticScope scope = _mongoClustersClientDiagnostics.CreateScope("MongoClusterCollection.Exists"); scope.Start(); try { RequestContext context = new RequestContext { CancellationToken = cancellationToken }; HttpMessage message = _mongoClustersRestClient.CreateGetRequest(Guid.Parse(Id.SubscriptionId), Id.ResourceGroupName, mongoClusterName, context); Pipeline.Send(message, context.CancellationToken); Response result = message.Response; Response response = default; switch (result.Status) { case 200: response = Response.FromValue(MongoClusterData.FromResponse(result), result); break; case 404: response = Response.FromValue((MongoClusterData)null, result); break; default: throw new RequestFailedException(result); } return Response.FromValue(response.Value != null, response.GetRawResponse()); } catch (Exception e) { scope.Failed(e); throw; } } /// /// Tries to get details for this resource from the service. /// /// /// Request Path. /// /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DocumentDB/mongoClusters/{mongoClusterName}. /// /// /// Operation Id. /// MongoClusters_Get. /// /// /// Default Api Version. /// 2026-02-01-preview. /// /// /// /// The name of the mongo cluster. /// The cancellation token to use. /// is null. /// is an empty string, and was expected to be non-empty. public virtual async Task> GetIfExistsAsync(string mongoClusterName, CancellationToken cancellationToken = default) { Argument.AssertNotNullOrEmpty(mongoClusterName, nameof(mongoClusterName)); using DiagnosticScope scope = _mongoClustersClientDiagnostics.CreateScope("MongoClusterCollection.GetIfExists"); scope.Start(); try { RequestContext context = new RequestContext { CancellationToken = cancellationToken }; HttpMessage message = _mongoClustersRestClient.CreateGetRequest(Guid.Parse(Id.SubscriptionId), Id.ResourceGroupName, mongoClusterName, context); await Pipeline.SendAsync(message, context.CancellationToken).ConfigureAwait(false); Response result = message.Response; Response response = default; switch (result.Status) { case 200: response = Response.FromValue(MongoClusterData.FromResponse(result), result); break; case 404: response = Response.FromValue((MongoClusterData)null, result); break; default: throw new RequestFailedException(result); } if (response.Value == null) { return new NoValueResponse(response.GetRawResponse()); } return Response.FromValue(new MongoClusterResource(Client, response.Value), response.GetRawResponse()); } catch (Exception e) { scope.Failed(e); throw; } } /// /// Tries to get details for this resource from the service. /// /// /// Request Path. /// /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DocumentDB/mongoClusters/{mongoClusterName}. /// /// /// Operation Id. /// MongoClusters_Get. /// /// /// Default Api Version. /// 2026-02-01-preview. /// /// /// /// The name of the mongo cluster. /// The cancellation token to use. /// is null. /// is an empty string, and was expected to be non-empty. public virtual NullableResponse GetIfExists(string mongoClusterName, CancellationToken cancellationToken = default) { Argument.AssertNotNullOrEmpty(mongoClusterName, nameof(mongoClusterName)); using DiagnosticScope scope = _mongoClustersClientDiagnostics.CreateScope("MongoClusterCollection.GetIfExists"); scope.Start(); try { RequestContext context = new RequestContext { CancellationToken = cancellationToken }; HttpMessage message = _mongoClustersRestClient.CreateGetRequest(Guid.Parse(Id.SubscriptionId), Id.ResourceGroupName, mongoClusterName, context); Pipeline.Send(message, context.CancellationToken); Response result = message.Response; Response response = default; switch (result.Status) { case 200: response = Response.FromValue(MongoClusterData.FromResponse(result), result); break; case 404: response = Response.FromValue((MongoClusterData)null, result); break; default: throw new RequestFailedException(result); } if (response.Value == null) { return new NoValueResponse(response.GetRawResponse()); } return Response.FromValue(new MongoClusterResource(Client, response.Value), response.GetRawResponse()); } catch (Exception e) { scope.Failed(e); throw; } } IEnumerator IEnumerable.GetEnumerator() { return GetAll().GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetAll().GetEnumerator(); } /// The cancellation token to use. IAsyncEnumerator IAsyncEnumerable.GetAsyncEnumerator(CancellationToken cancellationToken) { return GetAllAsync(cancellationToken: cancellationToken).GetAsyncEnumerator(cancellationToken); } } }