Skip to content

Commit e31c9de

Browse files
Merge branch 'vnext' into enhancement/add-clean-output-param
2 parents b785cb9 + 7db6f8a commit e31c9de

File tree

3 files changed

+44
-12
lines changed

3 files changed

+44
-12
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
@@ -33,7 +34,7 @@ public static async Task<int> ProcessOpenApiDocument(
3334
string csdl,
3435
FileInfo output,
3536
bool cleanoutput,
36-
OpenApiSpecVersion? version,
37+
string? version,
3738
OpenApiFormat? format,
3839
LogLevel loglevel,
3940
bool inline,
@@ -68,14 +69,15 @@ CancellationToken cancellationToken
6869
Stream stream;
6970
OpenApiDocument document;
7071
OpenApiFormat openApiFormat;
72+
OpenApiSpecVersion openApiVersion;
7173
var stopwatch = new Stopwatch();
7274

7375
if (!string.IsNullOrEmpty(csdl))
7476
{
7577
// Default to yaml and OpenApiVersion 3 during csdl to OpenApi conversion
7678
openApiFormat = format ?? GetOpenApiFormat(csdl, logger);
77-
version ??= OpenApiSpecVersion.OpenApi3_0;
78-
79+
openApiVersion = version == null ? OpenApiSpecVersion.OpenApi3_0 : TryParseOpenApiSpecVersion(version);
80+
7981
stream = await GetStream(csdl, logger, cancellationToken);
8082
document = await ConvertCsdlToOpenApi(stream);
8183
}
@@ -86,12 +88,12 @@ CancellationToken cancellationToken
8688
// Parsing OpenAPI file
8789
stopwatch.Start();
8890
logger.LogTrace("Parsing OpenApi file");
89-
var result = new OpenApiStreamReader(new OpenApiReaderSettings
91+
var result = await new OpenApiStreamReader(new OpenApiReaderSettings
9092
{
9193
ReferenceResolution = resolveexternal ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences,
9294
RuleSet = ValidationRuleSet.GetDefaultRuleSet()
9395
}
94-
).ReadAsync(stream).GetAwaiter().GetResult();
96+
).ReadAsync(stream);
9597

9698
document = result.OpenApiDocument;
9799
stopwatch.Stop();
@@ -116,7 +118,7 @@ CancellationToken cancellationToken
116118
}
117119

118120
openApiFormat = format ?? GetOpenApiFormat(openapi, logger);
119-
version ??= result.OpenApiDiagnostic.SpecificationVersion;
121+
openApiVersion = version == null ? TryParseOpenApiSpecVersion(version) : result.OpenApiDiagnostic.SpecificationVersion;
120122
}
121123

122124
Func<string, OperationType?, OpenApiOperation, bool> predicate;
@@ -173,11 +175,10 @@ CancellationToken cancellationToken
173175
logger.LogTrace("Serializing to OpenApi document using the provided spec version and writer");
174176

175177
stopwatch.Start();
176-
document.Serialize(writer, (OpenApiSpecVersion)version);
178+
document.Serialize(writer, openApiVersion);
177179
stopwatch.Stop();
178180

179181
logger.LogTrace($"Finished serializing in {stopwatch.ElapsedMilliseconds}ms");
180-
181182
textWriter.Flush();
182183

183184
return 0;
@@ -192,7 +193,7 @@ CancellationToken cancellationToken
192193
return 1;
193194
}
194195
}
195-
196+
196197
/// <summary>
197198
/// Converts CSDL to OpenAPI
198199
/// </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: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ static async Task<int> Main(string[] args)
2929
var cleanOutputOption = new Option<bool>("--clean-output", "Overwrite an existing file");
3030
cleanOutputOption.AddAlias("-co");
3131

32-
var versionOption = new Option<OpenApiSpecVersion?>("--version", "OpenAPI specification version");
32+
var versionOption = new Option<string?>("--version", "OpenAPI specification version");
3333
versionOption.AddAlias("-v");
3434

3535
var formatOption = new Option<OpenApiFormat?>("--format", "File format");
@@ -77,8 +77,8 @@ static async Task<int> Main(string[] args)
7777
resolveExternalOption,
7878
};
7979

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

8383
rootCommand.Add(transformCommand);
8484
rootCommand.Add(validateCommand);

0 commit comments

Comments
 (0)