// 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; } }