Skip to content

Commit dca8aef

Browse files
committed
Remove the YamlReaders folder in the Reader project and change the namespace
1 parent 42df50c commit dca8aef

29 files changed

+126
-127
lines changed

src/Microsoft.OpenApi.Readers/YamlReaders/OpenApiDiagnostic.cs renamed to src/Microsoft.OpenApi.Readers/OpenApiDiagnostic.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
using System.Collections.Generic;
77
using Microsoft.OpenApi.Readers.Interface;
88

9-
namespace Microsoft.OpenApi.Readers.YamlReaders
9+
namespace Microsoft.OpenApi.Readers
1010
{
1111
public class OpenApiDiagnostic : IDiagnostic
1212
{

src/Microsoft.OpenApi.Readers/YamlReaders/OpenApiError.cs renamed to src/Microsoft.OpenApi.Readers/OpenApiError.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.
44
// ------------------------------------------------------------
55

6-
namespace Microsoft.OpenApi.Readers.YamlReaders
6+
namespace Microsoft.OpenApi.Readers
77
{
88
public class OpenApiError
99
{
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
// ------------------------------------------------------------
2+
// Copyright (c) Microsoft Corporation. All rights reserved.
3+
// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.
4+
// ------------------------------------------------------------
5+
6+
using System.IO;
7+
using System.Linq;
8+
using Microsoft.OpenApi.Readers.Interface;
9+
using Microsoft.OpenApi.Readers.ParseNodes;
10+
using SharpYaml;
11+
using SharpYaml.Serialization;
12+
using Microsoft.OpenApi.Models;
13+
14+
namespace Microsoft.OpenApi.Readers
15+
{
16+
/// <summary>
17+
/// Service class for converting streams into OpenApiDocument instances
18+
/// </summary>
19+
public class OpenApiStreamReader : IOpenApiReader<Stream, OpenApiDiagnostic>
20+
{
21+
/// <summary>
22+
/// Gets the version of the Open API document.
23+
/// </summary>
24+
private static string GetVersion(RootNode rootNode)
25+
{
26+
var versionNode = rootNode.Find(new JsonPointer("/openapi"));
27+
28+
if (versionNode != null)
29+
{
30+
return versionNode.GetScalarValue();
31+
}
32+
33+
versionNode = rootNode.Find(new JsonPointer("/swagger"));
34+
35+
return versionNode?.GetScalarValue();
36+
}
37+
38+
/// <summary>
39+
/// Reads the stream input and parses it into an Open API document.
40+
/// </summary>
41+
public OpenApiDocument Read(Stream input, out OpenApiDiagnostic diagnostic)
42+
{
43+
RootNode rootNode;
44+
var context = new ParsingContext();
45+
diagnostic = new OpenApiDiagnostic();
46+
47+
try
48+
{
49+
using (var streamReader = new StreamReader(input))
50+
{
51+
var yamlStream = new YamlStream();
52+
yamlStream.Load(streamReader);
53+
54+
var yamlDocument = yamlStream.Documents.First();
55+
rootNode = new RootNode(context, diagnostic, yamlDocument);
56+
}
57+
}
58+
catch (SyntaxErrorException ex)
59+
{
60+
diagnostic.Errors.Add(new OpenApiError(string.Empty, ex.Message));
61+
62+
return new OpenApiDocument();
63+
}
64+
65+
var inputVersion = GetVersion(rootNode);
66+
67+
switch (inputVersion)
68+
{
69+
case "2.0":
70+
context.SetReferenceService(
71+
new OpenApiReferenceService(rootNode)
72+
{
73+
loadReference = OpenApiV2Deserializer.LoadReference,
74+
parseReference = p => OpenApiV2Deserializer.ParseReference(p)
75+
});
76+
77+
return OpenApiV2Deserializer.LoadOpenApi(rootNode);
78+
79+
default:
80+
context.SetReferenceService(
81+
new OpenApiReferenceService(rootNode)
82+
{
83+
loadReference = OpenApiV3Deserializer.LoadReference,
84+
parseReference = p => new OpenApiReference(p)
85+
});
86+
87+
return OpenApiV3Deserializer.LoadOpenApi(rootNode);
88+
}
89+
}
90+
}
91+
}

src/Microsoft.OpenApi.Readers/YamlReaders/OpenApiStringReader.cs renamed to src/Microsoft.OpenApi.Readers/OpenApiStringReader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
using Microsoft.OpenApi.Readers.Interface;
88
using Microsoft.OpenApi.Models;
99

10-
namespace Microsoft.OpenApi.Readers.YamlReaders
10+
namespace Microsoft.OpenApi.Readers
1111
{
1212
/// <summary>
1313
/// Service class for converting strings into OpenApiDocument instances

src/Microsoft.OpenApi.Readers/YamlReaders/OpenApiV2Deserializer.cs renamed to src/Microsoft.OpenApi.Readers/OpenApiV2Deserializer.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
1-
using System;
1+
// ------------------------------------------------------------
2+
// Copyright (c) Microsoft Corporation. All rights reserved.
3+
// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.
4+
// ------------------------------------------------------------
5+
6+
using System;
27
using System.Collections.Generic;
38
using System.Linq;
4-
using Microsoft.OpenApi.Readers.YamlReaders.ParseNodes;
59
using Microsoft.OpenApi.Any;
610
using Microsoft.OpenApi.Interfaces;
711
using Microsoft.OpenApi.Models;
12+
using Microsoft.OpenApi.Readers.ParseNodes;
813

9-
namespace Microsoft.OpenApi.Readers.YamlReaders
14+
namespace Microsoft.OpenApi.Readers
1015
{
1116
/// <summary>
1217
/// Class containing logic to deserialize Open API V2 document into

src/Microsoft.OpenApi.Readers/YamlReaders/OpenApiV3Deserializer.cs renamed to src/Microsoft.OpenApi.Readers/OpenApiV3Deserializer.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
1-
using System;
1+
// ------------------------------------------------------------
2+
// Copyright (c) Microsoft Corporation. All rights reserved.
3+
// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.
4+
// ------------------------------------------------------------
5+
6+
using System;
27
using System.Collections.Generic;
38
using System.Linq;
4-
using Microsoft.OpenApi.Readers.YamlReaders.ParseNodes;
59
using Microsoft.OpenApi.Any;
6-
using Microsoft.OpenApi.Models;
710
using Microsoft.OpenApi.Interfaces;
11+
using Microsoft.OpenApi.Models;
12+
using Microsoft.OpenApi.Readers.ParseNodes;
813

9-
namespace Microsoft.OpenApi.Readers.YamlReaders
14+
namespace Microsoft.OpenApi.Readers
1015
{
1116
/// <summary>
1217
/// Class containing logic to deserialize Open API V3 document into

src/Microsoft.OpenApi.Readers/YamlReaders/ParseNodes/FixedFieldMap.cs renamed to src/Microsoft.OpenApi.Readers/ParseNodes/FixedFieldMap.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
using System;
77
using System.Collections.Generic;
88

9-
namespace Microsoft.OpenApi.Readers.YamlReaders.ParseNodes
9+
namespace Microsoft.OpenApi.Readers.ParseNodes
1010
{
1111
internal class FixedFieldMap<T> : Dictionary<string, Action<T, ParseNode>>
1212
{

src/Microsoft.OpenApi.Readers/YamlReaders/ParseNodes/ListNode.cs renamed to src/Microsoft.OpenApi.Readers/ParseNodes/ListNode.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
using SharpYaml.Serialization;
1111
using Microsoft.OpenApi.Any;
1212

13-
namespace Microsoft.OpenApi.Readers.YamlReaders.ParseNodes
13+
namespace Microsoft.OpenApi.Readers.ParseNodes
1414
{
1515
internal class ListNode : ParseNode, IEnumerable<ParseNode>
1616
{

src/Microsoft.OpenApi.Readers/YamlReaders/ParseNodes/MapNode.cs renamed to src/Microsoft.OpenApi.Readers/ParseNodes/MapNode.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
using Microsoft.OpenApi.Any;
1313
using Microsoft.OpenApi.Interfaces;
1414

15-
namespace Microsoft.OpenApi.Readers.YamlReaders.ParseNodes
15+
namespace Microsoft.OpenApi.Readers.ParseNodes
1616
{
1717
/// <summary>
1818
/// Abstraction of a Map to isolate semantic parsing from details of

src/Microsoft.OpenApi.Readers/YamlReaders/ParseNodes/ParseNode.cs renamed to src/Microsoft.OpenApi.Readers/ParseNodes/ParseNode.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
using Microsoft.OpenApi.Any;
1111
using Microsoft.OpenApi.Interfaces;
1212

13-
namespace Microsoft.OpenApi.Readers.YamlReaders.ParseNodes
13+
namespace Microsoft.OpenApi.Readers.ParseNodes
1414
{
1515
internal abstract class ParseNode
1616
{

0 commit comments

Comments
 (0)