Files
WireMock.Net/src/WireMock.Net.Extensions.Routing/WireMockServerRouterBuilder.cs
Gennadii Saltyshchak be2ea67b89 Add new package WireMock.Net.Extensions.Routing which provides minimal-API-style routing for WireMock.Net (#1344)
* Add new package WireMock.Net.Extensions.Routing

* Update documentation for WireMock.Net.Extensions.Routing

* Cleanup imports

* Add header to all source files inside WireMock.Net.Extensions.Routing

* Add header to all source files inside WireMock.Net.Extensions.Routing.Tests

* Revert unintended changes

* Remove redundant build configurations

* Remove incorrect links from documentation

* Update nuget package references

* Revert unintended changes

* Migrate to AwesomeAssertions

* Remove redundant project reference

* Adjust formatting

* Migrate to primary constructor

* Refactoring: rename delegate parameter

* Abstract over JSON converter

* Replace WireMock with WireMock.Net in comments

* Move local functions to the bottom of the methods
2025-08-18 19:52:42 +02:00

74 lines
2.6 KiB
C#

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