// Copyright © WireMock.Net using System; using System.Collections.Generic; using System.IO; using System.Text; using JetBrains.Annotations; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Readers; using RamlToOpenApiConverter; using WireMock.Admin.Mappings; using WireMock.Net.OpenApiParser.Mappers; using WireMock.Net.OpenApiParser.Settings; namespace WireMock.Net.OpenApiParser; /// /// Parse a OpenApi/Swagger/V2/V3 or Raml to WireMock.Net MappingModels. /// public class WireMockOpenApiParser : IWireMockOpenApiParser { private readonly OpenApiStreamReader _reader = new(); /// [PublicAPI] public IReadOnlyList FromFile(string path, out OpenApiDiagnostic diagnostic) { return FromFile(path, new WireMockOpenApiParserSettings(), out diagnostic); } /// [PublicAPI] public IReadOnlyList FromFile(string path, WireMockOpenApiParserSettings settings, out OpenApiDiagnostic diagnostic) { OpenApiDocument document; if (Path.GetExtension(path).EndsWith("raml", StringComparison.OrdinalIgnoreCase)) { diagnostic = new OpenApiDiagnostic(); document = new RamlConverter().ConvertToOpenApiDocument(path); } else { var reader = new OpenApiStreamReader(); document = reader.Read(File.OpenRead(path), out diagnostic); } return FromDocument(document, settings); } /// [PublicAPI] public IReadOnlyList FromDocument(OpenApiDocument document, WireMockOpenApiParserSettings? settings = null) { return new OpenApiPathsMapper(settings ?? new WireMockOpenApiParserSettings()).ToMappingModels(document.Paths, document.Servers); } /// [PublicAPI] public IReadOnlyList FromStream(Stream stream, out OpenApiDiagnostic diagnostic) { return FromDocument(_reader.Read(stream, out diagnostic)); } /// [PublicAPI] public IReadOnlyList FromStream(Stream stream, WireMockOpenApiParserSettings settings, out OpenApiDiagnostic diagnostic) { return FromDocument(_reader.Read(stream, out diagnostic), settings); } /// [PublicAPI] public IReadOnlyList FromText(string text, out OpenApiDiagnostic diagnostic) { return FromStream(new MemoryStream(Encoding.UTF8.GetBytes(text)), out diagnostic); } /// [PublicAPI] public IReadOnlyList FromText(string text, WireMockOpenApiParserSettings settings, out OpenApiDiagnostic diagnostic) { return FromStream(new MemoryStream(Encoding.UTF8.GetBytes(text)), settings, out diagnostic); } }