4
4
using System . Linq ;
5
5
using System . Text ;
6
6
using Microsoft . OpenApi . Extensions ;
7
+ using Microsoft . OpenApi . Models ;
7
8
using Microsoft . OpenApi . Readers ;
8
9
using Microsoft . OpenApi . Validations ;
9
10
using Microsoft . OpenApi . Writers ;
@@ -13,21 +14,22 @@ namespace Microsoft.OpenApi.Tool
13
14
static class OpenApiService
14
15
{
15
16
public static void ProcessOpenApiDocument (
16
- FileInfo fileOption ,
17
- string outputPath ,
17
+ FileInfo input ,
18
+ FileInfo output ,
18
19
OpenApiSpecVersion version ,
19
20
OpenApiFormat format ,
20
- bool inline = false )
21
+ bool inline )
21
22
{
22
- Stream stream = fileOption . OpenRead ( ) ;
23
+ OpenApiDocument document ;
24
+ using ( Stream stream = input . OpenRead ( ) )
25
+ {
23
26
24
- var document = new OpenApiStreamReader ( new OpenApiReaderSettings
27
+ document = new OpenApiStreamReader ( new OpenApiReaderSettings
25
28
{
26
29
ReferenceResolution = ReferenceResolutionSetting . ResolveLocalReferences ,
27
30
RuleSet = ValidationRuleSet . GetDefaultRuleSet ( )
28
31
}
29
32
) . Read ( stream , out var context ) ;
30
-
31
33
if ( context . Errors . Count != 0 )
32
34
{
33
35
var errorReport = new StringBuilder ( ) ;
@@ -38,21 +40,41 @@ public static void ProcessOpenApiDocument(
38
40
}
39
41
40
42
throw new ArgumentException ( String . Join ( Environment . NewLine , context . Errors . Select ( e => e . Message ) . ToArray ( ) ) ) ;
43
+ }
41
44
}
42
45
43
- using ( var outputStream = new FileStream ( outputPath , FileMode . Create ) )
46
+ using ( var outputStream = output ? . Create ( ) )
44
47
{
45
- document . Serialize (
46
- outputStream ,
47
- version ,
48
- format ,
49
- new OpenApiWriterSettings ( )
50
- {
51
- ReferenceInline = inline == true ? ReferenceInlineSetting . InlineLocalReferences : ReferenceInlineSetting . DoNotInlineReferences
52
- } ) ;
48
+ TextWriter textWriter ;
49
+
50
+ if ( outputStream != null )
51
+ {
52
+ textWriter = new StreamWriter ( outputStream ) ;
53
+ } else
54
+ {
55
+ textWriter = Console . Out ;
56
+ }
57
+
58
+ var settings = new OpenApiWriterSettings ( )
59
+ {
60
+ ReferenceInline = inline == true ? ReferenceInlineSetting . InlineLocalReferences : ReferenceInlineSetting . DoNotInlineReferences
61
+ } ;
62
+ IOpenApiWriter writer ;
63
+ switch ( format )
64
+ {
65
+ case OpenApiFormat . Json :
66
+ writer = new OpenApiJsonWriter ( textWriter , settings ) ;
67
+ break ;
68
+ case OpenApiFormat . Yaml :
69
+ writer = new OpenApiYamlWriter ( textWriter , settings ) ;
70
+ break ;
71
+ default :
72
+ throw new ArgumentException ( "Unknown format" ) ;
73
+ }
74
+
75
+ document . Serialize ( writer , version ) ;
53
76
54
- outputStream . Position = 0 ;
55
- outputStream . Flush ( ) ;
77
+ textWriter . Flush ( ) ;
56
78
}
57
79
}
58
80
}
0 commit comments