using System.IO;
using System.Linq;
using JetBrains.Annotations;
using Microsoft.OpenApi.Models;
using Microsoft.OpenApi.Readers;
using Stef.Validation;
using WireMock.Net.OpenApiParser.Settings;
using WireMock.Server;
namespace WireMock.Net.OpenApiParser.Extensions;
///
/// Some extension methods for .
///
public static class WireMockServerExtensions
{
///
/// Register the mappings via an OpenAPI (swagger) V2 or V3 file.
///
/// The WireMockServer instance
/// Path containing OpenAPI file to parse and use the mappings.
/// Returns diagnostic object containing errors detected during parsing
[PublicAPI]
public static IWireMockServer WithMappingFromOpenApiFile(this IWireMockServer server, string path, out OpenApiDiagnostic diagnostic)
{
return WithMappingFromOpenApiFile(server, path, new WireMockOpenApiParserSettings(), out diagnostic);
}
///
/// Register the mappings via an OpenAPI (swagger) V2 or V3 file.
///
/// The WireMockServer instance
/// Path containing OpenAPI file to parse and use the mappings.
/// Returns diagnostic object containing errors detected during parsing
/// Additional settings
[PublicAPI]
public static IWireMockServer WithMappingFromOpenApiFile(this IWireMockServer server, string path, WireMockOpenApiParserSettings settings, out OpenApiDiagnostic diagnostic)
{
Guard.NotNull(server, nameof(server));
Guard.NotNullOrEmpty(path, nameof(path));
var mappings = new WireMockOpenApiParser().FromFile(path, settings, out diagnostic);
return server.WithMapping(mappings.ToArray());
}
///
/// Register the mappings via an OpenAPI (swagger) V2 or V3 stream.
///
/// The WireMockServer instance
/// Stream containing OpenAPI description to parse and use the mappings.
/// Returns diagnostic object containing errors detected during parsing
[PublicAPI]
public static IWireMockServer WithMappingFromOpenApiStream(this IWireMockServer server, Stream stream, out OpenApiDiagnostic diagnostic)
{
return WithMappingFromOpenApiStream(server, stream, new WireMockOpenApiParserSettings(), out diagnostic);
}
///
/// Register the mappings via an OpenAPI (swagger) V2 or V3 stream.
///
/// The WireMockServer instance
/// Stream containing OpenAPI description to parse and use the mappings.
/// Additional settings
/// Returns diagnostic object containing errors detected during parsing
[PublicAPI]
public static IWireMockServer WithMappingFromOpenApiStream(this IWireMockServer server, Stream stream, WireMockOpenApiParserSettings settings, out OpenApiDiagnostic diagnostic)
{
Guard.NotNull(server);
Guard.NotNull(stream);
Guard.NotNull(settings);
var mappings = new WireMockOpenApiParser().FromStream(stream, settings, out diagnostic);
return server.WithMapping(mappings.ToArray());
}
///
/// Register the mappings via an OpenAPI (swagger) V2 or V3 document.
///
/// The WireMockServer instance
/// The OpenAPI document to use as mappings.
/// Additional settings [optional]
[PublicAPI]
public static IWireMockServer WithMappingFromOpenApiDocument(this IWireMockServer server, OpenApiDocument document, WireMockOpenApiParserSettings settings)
{
Guard.NotNull(server);
Guard.NotNull(document);
var mappings = new WireMockOpenApiParser().FromDocument(document, settings);
return server.WithMapping(mappings.ToArray());
}
}