// Copyright © WireMock.Net
using System.Collections.Concurrent;
using JsonConverter.Abstractions;
using WireMock.Net.Extensions.Routing.Delegates;
using WireMock.Server;
namespace WireMock.Net.Extensions.Routing;
///
/// Provides a builder for configuring and creating a with middleware and JSON settings.
///
///
/// Initializes a new instance of the class.
///
/// The WireMock.Net server instance.
public sealed class WireMockServerRouterBuilder(WireMockServer server)
{
private readonly WireMockServer _server = server;
private readonly ConcurrentQueue _middlewareCollection = new();
private IJsonConverter? _defaultJsonConverter;
private JsonConverterOptions? _defaultJsonOptions;
///
/// Builds a with the configured middleware and JSON settings.
///
/// The configured .
public WireMockRouter Build() =>
new(_server)
{
MiddlewareCollection = _middlewareCollection,
DefaultJsonConverter = _defaultJsonConverter,
DefaultJsonOptions = _defaultJsonOptions,
};
///
/// Adds a middleware to the router builder.
///
/// The middleware to add.
/// The current instance.
public WireMockServerRouterBuilder Use(WireMockMiddleware middleware)
{
_middlewareCollection.Enqueue(middleware);
return this;
}
///
/// Sets the default .
///
/// the default
/// The current instance.
public WireMockServerRouterBuilder WithDefaultJsonConverter(
IJsonConverter? defaultJsonConverter)
{
_defaultJsonConverter = defaultJsonConverter;
return this;
}
///
/// Sets the default [optional].
///
/// the default [optional]
/// The current instance.
public WireMockServerRouterBuilder WithDefaultJsonOptions(
JsonConverterOptions? defaultJsonOptions)
{
_defaultJsonOptions = defaultJsonOptions;
return this;
}
}