// Copyright © WireMock.Net
using JsonConverter.Abstractions;
using JsonConverter.Newtonsoft.Json;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using WireMock.Matchers;
using WireMock.Net.Extensions.Routing.Delegates;
using WireMock.Net.Extensions.Routing.Extensions;
using WireMock.Net.Extensions.Routing.Models;
using WireMock.Net.Extensions.Routing.Utils;
using WireMock.Server;
namespace WireMock.Net.Extensions.Routing;
///
/// Provides routing and request mapping functionality for WireMock.Net,
/// mimicking ASP.NET Core Minimal APIs routing style.
///
///
/// Initializes a new instance of the class.
///
/// The WireMock.Net server instance.
public sealed class WireMockRouter(WireMockServer server)
{
private readonly WireMockServer _server = server;
///
/// Gets or initializes the collection of middleware for the router.
///
public IReadOnlyCollection MiddlewareCollection { get; init; } = [];
///
/// Gets or initializes the default [optional].
///
public IJsonConverter? DefaultJsonConverter { get; init; }
///
/// Gets or initializes the default [optional].
///
public JsonConverterOptions? DefaultJsonOptions { get; init; }
///
/// Maps a route to a synchronous request handler.
///
/// The HTTP method.
/// The route pattern.
/// The request handler function.
/// The current instance.
public WireMockRouter Map(
string method, string pattern, Func requestHandler)
{
return Map(method, pattern, CreateResponse);
object? CreateResponse(IRequestMessage request) =>
requestHandler(CreateRequestInfo(request, pattern));
}
///
/// Maps a route to an asynchronous request handler.
///
/// The HTTP method.
/// The route pattern.
/// The asynchronous request handler function.
/// The current instance.
public WireMockRouter Map(
string method, string pattern, Func> requestHandler)
{
return Map(method, pattern, CreateResponseAsync);
Task