Skip to content

Commit e29c01d

Browse files
committed
chore: default registration of json reader
chore: default namespace for yaml reader registration Signed-off-by: Vincent Biret <[email protected]>
1 parent fe7a2fd commit e29c01d

File tree

3 files changed

+28
-10
lines changed

3 files changed

+28
-10
lines changed

src/Microsoft.OpenApi.Readers/OpenApiReaderSettingsExtensions.cs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
using Microsoft.OpenApi.Interfaces;
12
using Microsoft.OpenApi.Models;
2-
using Microsoft.OpenApi.Reader;
3+
using Microsoft.OpenApi.Readers;
34

4-
namespace Microsoft.OpenApi.Readers;
5+
namespace Microsoft.OpenApi.Reader;
56

67
/// <summary>
78
/// Extensions for <see cref="OpenApiReaderSettings"/>
@@ -15,7 +16,18 @@ public static class OpenApiReaderSettingsExtensions
1516
public static void AddYamlReader(this OpenApiReaderSettings settings)
1617
{
1718
var yamlReader = new OpenApiYamlReader();
18-
settings.Readers.Add(OpenApiConstants.Yaml, yamlReader);
19-
settings.Readers.Add(OpenApiConstants.Yml, yamlReader);
19+
settings.AddReaderToSettings(OpenApiConstants.Yaml, yamlReader);
20+
settings.AddReaderToSettings(OpenApiConstants.Yml, yamlReader);
21+
}
22+
private static void AddReaderToSettings(this OpenApiReaderSettings settings, string format, IOpenApiReader reader)
23+
{
24+
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP || NET5_0_OR_GREATER
25+
settings.Readers.Add(format, reader);
26+
#else
27+
if (!settings.Readers.ContainsKey(format))
28+
{
29+
settings.Readers.Add(format, reader);
30+
}
31+
#endif
2032
}
2133
}

src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ public static ReadResult Load(MemoryStream stream,
4040
if (stream is null) throw new ArgumentNullException(nameof(stream));
4141
#endif
4242
settings ??= new OpenApiReaderSettings();
43-
settings.AddJsonReader();
4443

4544
// Get the format of the stream if not provided
4645
format ??= InspectStreamFormat(stream);
@@ -118,7 +117,6 @@ public static async Task<ReadResult> LoadAsync(Stream input, string format = nul
118117
if (input is null) throw new ArgumentNullException(nameof(input));
119118
#endif
120119
settings ??= new OpenApiReaderSettings();
121-
settings.AddJsonReader();
122120

123121
Stream preparedStream;
124122
if (format is null)
@@ -201,7 +199,6 @@ public static ReadResult Parse(string input,
201199
#endif
202200
format ??= InspectInputFormat(input);
203201
settings ??= new OpenApiReaderSettings();
204-
settings.AddJsonReader();
205202

206203
// Copy string into MemoryStream
207204
using var stream = new MemoryStream(Encoding.UTF8.GetBytes(input));
@@ -233,7 +230,6 @@ public static T Parse<T>(string input,
233230
#endif
234231
format ??= InspectInputFormat(input);
235232
settings ??= new OpenApiReaderSettings();
236-
settings.AddJsonReader();
237233
using var stream = new MemoryStream(Encoding.UTF8.GetBytes(input));
238234
return Load<T>(stream, version, format, openApiDocument, out diagnostic, settings);
239235
}

src/Microsoft.OpenApi/Reader/OpenApiReaderSettings.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,22 @@ public class OpenApiReaderSettings
2222
/// </summary>
2323
public void AddJsonReader()
2424
{
25-
Readers.Add(OpenApiConstants.Json, new OpenApiJsonReader());
25+
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP || NET5_0_OR_GREATER
26+
Readers.TryAdd(OpenApiConstants.Json, new OpenApiJsonReader());
27+
#else
28+
if (!Readers.ContainsKey(OpenApiConstants.Json))
29+
{
30+
Readers.Add(OpenApiConstants.Json, new OpenApiJsonReader());
31+
}
32+
#endif
2633
}
2734
/// <summary>
2835
/// Readers to use to parse the OpenAPI document
2936
/// </summary>
30-
public Dictionary<string, IOpenApiReader> Readers { get; init; } = new Dictionary<string, IOpenApiReader>(StringComparer.OrdinalIgnoreCase);
37+
public Dictionary<string, IOpenApiReader> Readers { get; init; } = new Dictionary<string, IOpenApiReader>(StringComparer.OrdinalIgnoreCase)
38+
{
39+
{ OpenApiConstants.Json, new OpenApiJsonReader() }
40+
};
3141
/// <summary>
3242
/// When external references are found, load them into a shared workspace
3343
/// </summary>

0 commit comments

Comments
 (0)