using System; using System.Collections.Generic; using System.Linq; using Microsoft.OpenApi.Models; using Models; namespace Parser { public static class EndpointParser { public static List ParseAllEndpoints(OpenApiDocument openApiDocument) { List endpoints = new List(); foreach (var path in openApiDocument.Paths) { endpoints.Add(ParseEndpoint(path, GetBasePath(openApiDocument))); } return endpoints; } static Endpoint ParseEndpoint(KeyValuePair path, string basePath) { Endpoint endpoint = new Endpoint(basePath + path.Key); foreach (KeyValuePair operation in path.Value.Operations) { endpoint.Requests.Add(RequestParser.ParseRequest(operation)); } return endpoint; } static string GetBasePath(OpenApiDocument openApiDocument) { string basePath = string.Empty; if (openApiDocument.Servers.Any()) { basePath = GetUriFromServer(openApiDocument.Servers.First())?.AbsolutePath; } if (basePath == "/") basePath = string.Empty; return basePath; } static Uri GetUriFromServer(OpenApiServer server) { try { return new Uri(server.Url); } catch (UriFormatException) { return null; } } } }