3
3
4
4
using System . IO ;
5
5
using System . Linq ;
6
+ using Microsoft . OpenApi . Extensions ;
6
7
using Microsoft . OpenApi . Models ;
7
8
using Microsoft . OpenApi . Readers . Interface ;
9
+ using Microsoft . OpenApi . Services ;
10
+ using Microsoft . OpenApi . Validations ;
8
11
using SharpYaml ;
9
12
using SharpYaml . Serialization ;
10
13
@@ -15,7 +18,17 @@ namespace Microsoft.OpenApi.Readers
15
18
/// </summary>
16
19
public class OpenApiStreamReader : IOpenApiReader < Stream , OpenApiDiagnostic >
17
20
{
21
+ private OpenApiReaderSettings _settings ;
18
22
23
+ /// <summary>
24
+ /// Create stream reader with custom settings if desired.
25
+ /// </summary>
26
+ /// <param name="settings"></param>
27
+ public OpenApiStreamReader ( OpenApiReaderSettings settings = null )
28
+ {
29
+ _settings = settings ?? new OpenApiReaderSettings ( ) ;
30
+
31
+ }
19
32
/// <summary>
20
33
/// Reads the stream input and parses it into an Open API document.
21
34
/// </summary>
@@ -28,6 +41,7 @@ public OpenApiDocument Read(Stream input, out OpenApiDiagnostic diagnostic)
28
41
YamlDocument yamlDocument ;
29
42
diagnostic = new OpenApiDiagnostic ( ) ;
30
43
44
+ // Parse the YAML/JSON
31
45
try
32
46
{
33
47
yamlDocument = LoadYamlDocument ( input ) ;
@@ -38,8 +52,22 @@ public OpenApiDocument Read(Stream input, out OpenApiDiagnostic diagnostic)
38
52
return new OpenApiDocument ( ) ;
39
53
}
40
54
41
- context = new ParsingContext ( ) ;
42
- return context . Parse ( yamlDocument , diagnostic ) ;
55
+ context = new ParsingContext
56
+ {
57
+ ExtensionParsers = _settings . ExtensionParsers
58
+ } ;
59
+
60
+ // Parse the OpenAPI Document
61
+ var document = context . Parse ( yamlDocument , diagnostic ) ;
62
+
63
+ // Validate the document
64
+ var errors = document . Validate ( _settings . RuleSet ) ;
65
+ foreach ( var item in errors )
66
+ {
67
+ diagnostic . Errors . Add ( new OpenApiError ( item . ErrorPath , item . ErrorMessage ) ) ;
68
+ }
69
+
70
+ return document ;
43
71
}
44
72
45
73
/// <summary>
0 commit comments