Skip to content

Commit 7db6f8a

Browse files
authored
Merge pull request #767 from microsoft/fix/simplify-openapi-spec-version
Simplify openapi spec version for Hidi
2 parents 0d9d96b + be96424 commit 7db6f8a

File tree

3 files changed

+43
-11
lines changed

3 files changed

+43
-11
lines changed

src/Microsoft.OpenApi.Hidi/OpenApiService.cs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
using Microsoft.OpenApi.Services;
2323
using Microsoft.OpenApi.Validations;
2424
using Microsoft.OpenApi.Writers;
25+
using static Microsoft.OpenApi.Hidi.OpenApiSpecVersionHelper;
2526
using System.Threading;
2627

2728
namespace Microsoft.OpenApi.Hidi
@@ -32,7 +33,7 @@ public static async Task<int> ProcessOpenApiDocument(
3233
string openapi,
3334
string csdl,
3435
FileInfo output,
35-
OpenApiSpecVersion? version,
36+
string? version,
3637
OpenApiFormat? format,
3738
LogLevel loglevel,
3839
bool inline,
@@ -63,14 +64,15 @@ CancellationToken cancellationToken
6364
Stream stream;
6465
OpenApiDocument document;
6566
OpenApiFormat openApiFormat;
67+
OpenApiSpecVersion openApiVersion;
6668
var stopwatch = new Stopwatch();
6769

6870
if (!string.IsNullOrEmpty(csdl))
6971
{
7072
// Default to yaml and OpenApiVersion 3 during csdl to OpenApi conversion
7173
openApiFormat = format ?? GetOpenApiFormat(csdl, logger);
72-
version ??= OpenApiSpecVersion.OpenApi3_0;
73-
74+
openApiVersion = version == null ? OpenApiSpecVersion.OpenApi3_0 : TryParseOpenApiSpecVersion(version);
75+
7476
stream = await GetStream(csdl, logger, cancellationToken);
7577
document = await ConvertCsdlToOpenApi(stream);
7678
}
@@ -81,12 +83,12 @@ CancellationToken cancellationToken
8183
// Parsing OpenAPI file
8284
stopwatch.Start();
8385
logger.LogTrace("Parsing OpenApi file");
84-
var result = new OpenApiStreamReader(new OpenApiReaderSettings
86+
var result = await new OpenApiStreamReader(new OpenApiReaderSettings
8587
{
8688
ReferenceResolution = resolveexternal ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences,
8789
RuleSet = ValidationRuleSet.GetDefaultRuleSet()
8890
}
89-
).ReadAsync(stream).GetAwaiter().GetResult();
91+
).ReadAsync(stream);
9092

9193
document = result.OpenApiDocument;
9294
stopwatch.Stop();
@@ -111,7 +113,7 @@ CancellationToken cancellationToken
111113
}
112114

113115
openApiFormat = format ?? GetOpenApiFormat(openapi, logger);
114-
version ??= result.OpenApiDiagnostic.SpecificationVersion;
116+
openApiVersion = version == null ? TryParseOpenApiSpecVersion(version) : result.OpenApiDiagnostic.SpecificationVersion;
115117
}
116118

117119
Func<string, OperationType?, OpenApiOperation, bool> predicate;
@@ -168,11 +170,10 @@ CancellationToken cancellationToken
168170
logger.LogTrace("Serializing to OpenApi document using the provided spec version and writer");
169171

170172
stopwatch.Start();
171-
document.Serialize(writer, (OpenApiSpecVersion)version);
173+
document.Serialize(writer, openApiVersion);
172174
stopwatch.Stop();
173175

174176
logger.LogTrace($"Finished serializing in {stopwatch.ElapsedMilliseconds}ms");
175-
176177
textWriter.Flush();
177178

178179
return 0;
@@ -187,7 +188,7 @@ CancellationToken cancellationToken
187188
return 1;
188189
}
189190
}
190-
191+
191192
/// <summary>
192193
/// Converts CSDL to OpenAPI
193194
/// </summary>
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT license.
3+
4+
using System;
5+
using System.Linq;
6+
7+
namespace Microsoft.OpenApi.Hidi
8+
{
9+
public static class OpenApiSpecVersionHelper
10+
{
11+
public static OpenApiSpecVersion TryParseOpenApiSpecVersion(string value)
12+
{
13+
if (string.IsNullOrEmpty(value))
14+
{
15+
throw new InvalidOperationException("Please provide a version");
16+
}
17+
var res = value.Split('.', StringSplitOptions.RemoveEmptyEntries).FirstOrDefault();
18+
19+
if (int.TryParse(res, out int result))
20+
{
21+
22+
if (result >= 2 && result < 3)
23+
{
24+
return OpenApiSpecVersion.OpenApi2_0;
25+
}
26+
}
27+
28+
return OpenApiSpecVersion.OpenApi3_0; // default
29+
}
30+
}
31+
}

src/Microsoft.OpenApi.Hidi/Program.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ static async Task<int> Main(string[] args)
2626
var outputOption = new Option<FileInfo>("--output", () => new FileInfo("./output"), "The output directory path for the generated file.") { Arity = ArgumentArity.ZeroOrOne };
2727
outputOption.AddAlias("-o");
2828

29-
var versionOption = new Option<OpenApiSpecVersion?>("--version", "OpenAPI specification version");
29+
var versionOption = new Option<string?>("--version", "OpenAPI specification version");
3030
versionOption.AddAlias("-v");
3131

3232
var formatOption = new Option<OpenApiFormat?>("--format", "File format");
@@ -73,7 +73,7 @@ static async Task<int> Main(string[] args)
7373
resolveExternalOption,
7474
};
7575

76-
transformCommand.SetHandler<string, string, FileInfo, OpenApiSpecVersion?, OpenApiFormat?, LogLevel, bool, bool, string, string, string, CancellationToken> (
76+
transformCommand.SetHandler<string, string, FileInfo, string?, OpenApiFormat?, LogLevel, bool, bool, string, string, string, CancellationToken> (
7777
OpenApiService.ProcessOpenApiDocument, descriptionOption, csdlOption, outputOption, versionOption, formatOption, logLevelOption, inlineOption, resolveExternalOption, filterByOperationIdsOption, filterByTagsOption, filterByCollectionOption);
7878

7979
rootCommand.Add(transformCommand);

0 commit comments

Comments
 (0)