66using System . Linq ;
77using Microsoft . OpenApi . Interfaces ;
88using Microsoft . OpenApi . Models ;
9+ using Microsoft . OpenApi . Readers . Exceptions ;
910using Microsoft . OpenApi . Readers . Interface ;
1011using Microsoft . OpenApi . Readers . ParseNodes ;
1112using Microsoft . OpenApi . Readers . V2 ;
@@ -41,26 +42,24 @@ internal OpenApiDocument Parse(YamlDocument yamlDocument, OpenApiDiagnostic diag
4142
4243 OpenApiDocument doc ;
4344
44- if ( inputVersion == "2.0" )
45+ switch ( inputVersion )
4546 {
46- VersionService = new OpenApiV2VersionService ( ) ;
47- doc = this . VersionService . LoadDocument ( this . RootNode ) ;
48- diagnostic . SpecificationVersion = OpenApiSpecVersion . OpenApi2_0 ;
49- }
50- else if ( inputVersion . StartsWith ( "3.0." ) )
51- {
52- this . VersionService = new OpenApiV3VersionService ( ) ;
53- doc = this . VersionService . LoadDocument ( this . RootNode ) ;
54- diagnostic . SpecificationVersion = OpenApiSpecVersion . OpenApi3_0 ;
55- }
56- else
57- {
58- // If version number is not recognizable,
59- // our best effort will try to deserialize the document to V3.
60- this . VersionService = new OpenApiV3VersionService ( ) ;
61- doc = this . VersionService . LoadDocument ( this . RootNode ) ;
62- diagnostic . SpecificationVersion = OpenApiSpecVersion . OpenApi3_0 ;
47+ case string version when version == "2.0" :
48+ VersionService = new OpenApiV2VersionService ( ) ;
49+ doc = this . VersionService . LoadDocument ( this . RootNode ) ;
50+ diagnostic . SpecificationVersion = OpenApiSpecVersion . OpenApi2_0 ;
51+ break ;
52+
53+ case string version when version . StartsWith ( "3.0" ) :
54+ this . VersionService = new OpenApiV3VersionService ( ) ;
55+ doc = this . VersionService . LoadDocument ( this . RootNode ) ;
56+ diagnostic . SpecificationVersion = OpenApiSpecVersion . OpenApi3_0 ;
57+ break ;
58+
59+ default :
60+ throw new OpenApiUnsupportedSpecVersionException ( inputVersion ) ;
6361 }
62+
6463 return doc ;
6564 }
6665
@@ -81,7 +80,7 @@ private static string GetVersion(RootNode rootNode)
8180 return versionNode ? . GetScalarValue ( ) ;
8281 }
8382
84- private void ComputeTags ( List < OpenApiTag > tags , Func < MapNode , OpenApiTag > loadTag )
83+ private void ComputeTags ( List < OpenApiTag > tags , Func < MapNode , OpenApiTag > loadTag )
8584 {
8685 // Precompute the tags array so that each tag reference does not require a new deserialization.
8786 var tagListPointer = new JsonPointer ( "#/tags" ) ;
0 commit comments