using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Stef.Validation;
using WireMock.Admin.Mappings;
namespace WireMock.Client.Builders;
///
/// AdminApiMappingBuilder
///
public class AdminApiMappingBuilder
{
private readonly List> _mappingModelBuilderActions = new();
private readonly IWireMockAdminApi _api;
///
/// AdminApiMappingBuilder
///
/// The .
public AdminApiMappingBuilder(IWireMockAdminApi api)
{
_api = Guard.NotNull(api);
}
///
/// The Given
///
/// The action.
public void Given(Action mappingModelBuilderAction)
{
_mappingModelBuilderActions.Add(Guard.NotNull(mappingModelBuilderAction));
}
///
/// Build the mappings and post these using the to the WireMock.Net server.
///
/// The optional CancellationToken.
///
public Task BuildAndPostAsync(CancellationToken cancellationToken = default)
{
var modelMappings = new List();
foreach (var mappingModelBuilderAction in _mappingModelBuilderActions)
{
cancellationToken.ThrowIfCancellationRequested();
var mappingModelBuilder = new MappingModelBuilder();
mappingModelBuilderAction(mappingModelBuilder);
modelMappings.Add(mappingModelBuilder.Build());
}
return _api.PostMappingsAsync(modelMappings, cancellationToken);
}
}