From 5034952d506ae08837ca75d73fb71940eda070b9 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Thu, 3 Mar 2022 18:58:39 +0300 Subject: [PATCH 1/4] Update cmd parameter to accept string values for OpenApi spec version --- src/Microsoft.OpenApi.Hidi/Program.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 95e6f63f2..4fed0cb44 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -25,7 +25,7 @@ static async Task Main(string[] args) var outputOption = new Option("--output", () => new FileInfo("./output"), "The output directory path for the generated file.") { Arity = ArgumentArity.ZeroOrOne }; outputOption.AddAlias("-o"); - var versionOption = new Option("--version", "OpenAPI specification version"); + var versionOption = new Option("--version", "OpenAPI specification version"); versionOption.AddAlias("-v"); var formatOption = new Option("--format", "File format"); @@ -72,7 +72,7 @@ static async Task Main(string[] args) resolveExternalOption, }; - transformCommand.SetHandler ( + transformCommand.SetHandler ( OpenApiService.ProcessOpenApiDocument, descriptionOption, csdlOption, outputOption, versionOption, formatOption, logLevelOption, inlineOption, resolveExternalOption, filterByOperationIdsOption, filterByTagsOption, filterByCollectionOption); rootCommand.Add(transformCommand); From 5fbb5683195a2879374c8df0588fa3373b8d44bb Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Thu, 3 Mar 2022 19:00:54 +0300 Subject: [PATCH 2/4] Cast string to OpenApiSpecVersion enum value --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 12 ++++--- .../OpenApiSpecVersionExtension.cs | 31 +++++++++++++++++++ 2 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionExtension.cs diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 1f86e3c06..77ddd08c0 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -22,6 +22,7 @@ using Microsoft.OpenApi.Services; using Microsoft.OpenApi.Validations; using Microsoft.OpenApi.Writers; +using static Microsoft.OpenApi.Hidi.OpenApiSpecVersionExtension; namespace Microsoft.OpenApi.Hidi { @@ -31,7 +32,7 @@ public static async Task ProcessOpenApiDocument( string openapi, string csdl, FileInfo output, - OpenApiSpecVersion? version, + string? version, OpenApiFormat? format, LogLevel loglevel, bool inline, @@ -83,13 +84,14 @@ string filterbycollection Stream stream; OpenApiDocument document; OpenApiFormat openApiFormat; + OpenApiSpecVersion? openApiVersion = null; var stopwatch = new Stopwatch(); if (!string.IsNullOrEmpty(csdl)) { // Default to yaml and OpenApiVersion 3 during csdl to OpenApi conversion openApiFormat = format ?? GetOpenApiFormat(csdl, logger); - version ??= OpenApiSpecVersion.OpenApi3_0; + openApiVersion = version.TryParseOpenApiSpecVersion(); stream = await GetStream(csdl, logger); document = await ConvertCsdlToOpenApi(stream); @@ -128,7 +130,7 @@ string filterbycollection } openApiFormat = format ?? GetOpenApiFormat(openapi, logger); - version ??= result.OpenApiDiagnostic.SpecificationVersion; + openApiVersion ??= result.OpenApiDiagnostic.SpecificationVersion; } Func predicate; @@ -185,14 +187,14 @@ string filterbycollection logger.LogTrace("Serializing to OpenApi document using the provided spec version and writer"); stopwatch.Start(); - document.Serialize(writer, (OpenApiSpecVersion)version); + document.Serialize(writer, (OpenApiSpecVersion)openApiVersion); stopwatch.Stop(); logger.LogTrace($"Finished serializing in {stopwatch.ElapsedMilliseconds}ms"); textWriter.Flush(); } - + /// /// Converts CSDL to OpenAPI /// diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionExtension.cs b/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionExtension.cs new file mode 100644 index 000000000..9b877099e --- /dev/null +++ b/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionExtension.cs @@ -0,0 +1,31 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; +using System.Linq; + +namespace Microsoft.OpenApi.Hidi +{ + public static class OpenApiSpecVersionExtension + { + public static OpenApiSpecVersion TryParseOpenApiSpecVersion(this string value) + { + if (string.IsNullOrEmpty(value)) + { + throw new InvalidOperationException("Please provide a version"); + } + var res = value.Split('.', StringSplitOptions.RemoveEmptyEntries).FirstOrDefault(); + + if (int.TryParse(res, out int result)) + { + + if (result >= 2 || result <= 3) + { + return (OpenApiSpecVersion)result; + } + } + + return OpenApiSpecVersion.OpenApi3_0; // default + } + } +} From da118bf71cfe8899f22b9a771dcec15e26206a92 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 7 Mar 2022 12:06:25 +0300 Subject: [PATCH 3/4] Refactor logic to accept a string as a regular param and rename the extension class --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 4 ++-- ...rsionExtension.cs => OpenApiSpecVersionHelper.cs} | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) rename src/Microsoft.OpenApi.Hidi/{OpenApiSpecVersionExtension.cs => OpenApiSpecVersionHelper.cs} (76%) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 77ddd08c0..952dc0b94 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -22,7 +22,7 @@ using Microsoft.OpenApi.Services; using Microsoft.OpenApi.Validations; using Microsoft.OpenApi.Writers; -using static Microsoft.OpenApi.Hidi.OpenApiSpecVersionExtension; +using static Microsoft.OpenApi.Hidi.OpenApiSpecVersionHelper; namespace Microsoft.OpenApi.Hidi { @@ -91,7 +91,7 @@ string filterbycollection { // Default to yaml and OpenApiVersion 3 during csdl to OpenApi conversion openApiFormat = format ?? GetOpenApiFormat(csdl, logger); - openApiVersion = version.TryParseOpenApiSpecVersion(); + openApiVersion = TryParseOpenApiSpecVersion(version); stream = await GetStream(csdl, logger); document = await ConvertCsdlToOpenApi(stream); diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionExtension.cs b/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionHelper.cs similarity index 76% rename from src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionExtension.cs rename to src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionHelper.cs index 9b877099e..a78255be2 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionExtension.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionHelper.cs @@ -6,24 +6,24 @@ namespace Microsoft.OpenApi.Hidi { - public static class OpenApiSpecVersionExtension + public static class OpenApiSpecVersionHelper { - public static OpenApiSpecVersion TryParseOpenApiSpecVersion(this string value) + public static OpenApiSpecVersion TryParseOpenApiSpecVersion(string value) { if (string.IsNullOrEmpty(value)) { throw new InvalidOperationException("Please provide a version"); } var res = value.Split('.', StringSplitOptions.RemoveEmptyEntries).FirstOrDefault(); - + if (int.TryParse(res, out int result)) { - if (result >= 2 || result <= 3) + if (result >= 2 && result < 3) { - return (OpenApiSpecVersion)result; + return OpenApiSpecVersion.OpenApi2_0; } - } + } return OpenApiSpecVersion.OpenApi3_0; // default } From be964247425e09a4f7fb7a4afca0bd8c1d3a8276 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Wed, 9 Mar 2022 00:16:49 -0500 Subject: [PATCH 4/4] f --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 8f1fa2c43..ba8b84e0e 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -64,14 +64,15 @@ CancellationToken cancellationToken Stream stream; OpenApiDocument document; OpenApiFormat openApiFormat; + OpenApiSpecVersion openApiVersion; var stopwatch = new Stopwatch(); if (!string.IsNullOrEmpty(csdl)) { // Default to yaml and OpenApiVersion 3 during csdl to OpenApi conversion openApiFormat = format ?? GetOpenApiFormat(csdl, logger); - version ??= OpenApiSpecVersion.OpenApi3_0; - + openApiVersion = version == null ? OpenApiSpecVersion.OpenApi3_0 : TryParseOpenApiSpecVersion(version); + stream = await GetStream(csdl, logger, cancellationToken); document = await ConvertCsdlToOpenApi(stream); } @@ -112,7 +113,7 @@ CancellationToken cancellationToken } openApiFormat = format ?? GetOpenApiFormat(openapi, logger); - version ??= result.OpenApiDiagnostic.SpecificationVersion; + openApiVersion = version == null ? TryParseOpenApiSpecVersion(version) : result.OpenApiDiagnostic.SpecificationVersion; } Func predicate; @@ -127,14 +128,14 @@ CancellationToken cancellationToken logger.LogTrace("Creating predicate based on the operationIds supplied."); predicate = OpenApiFilterService.CreatePredicate(operationIds: filterbyoperationids); -\ logger.LogTrace("Creating subset OpenApi document."); + logger.LogTrace("Creating subset OpenApi document."); document = OpenApiFilterService.CreateFilteredDocument(document, predicate); } if (!string.IsNullOrEmpty(filterbytags)) { logger.LogTrace("Creating predicate based on the tags supplied."); predicate = OpenApiFilterService.CreatePredicate(tags: filterbytags); -\ + logger.LogTrace("Creating subset OpenApi document."); document = OpenApiFilterService.CreateFilteredDocument(document, predicate); } @@ -169,7 +170,7 @@ CancellationToken cancellationToken logger.LogTrace("Serializing to OpenApi document using the provided spec version and writer"); stopwatch.Start(); - document.Serialize(writer, (OpenApiSpecVersion)version); + document.Serialize(writer, openApiVersion); stopwatch.Stop(); logger.LogTrace($"Finished serializing in {stopwatch.ElapsedMilliseconds}ms");