using System.IO; using System.Linq; using System.Runtime.InteropServices.ComTypes; using JetBrains.Annotations; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Readers; using SharpYaml.Model; 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, null, 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, null, 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, nameof(server)); Guard.NotNull(stream, nameof(stream)); Guard.NotNull(settings, nameof(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 = null) { Guard.NotNull(server, nameof(server)); Guard.NotNull(document, nameof(document)); var mappings = new WireMockOpenApiParser().FromDocument(document, settings); return server.WithMapping(mappings.ToArray()); } } }