3
3
4
4
using System . Globalization ;
5
5
using System . IO ;
6
+ using System . Threading ;
7
+ using System . Threading . Tasks ;
6
8
using Microsoft . OpenApi . Exceptions ;
7
9
using Microsoft . OpenApi . Interfaces ;
8
10
using Microsoft . OpenApi . Properties ;
@@ -22,10 +24,11 @@ public static class OpenApiSerializableExtensions
22
24
/// <param name="element">The Open API element.</param>
23
25
/// <param name="stream">The output stream.</param>
24
26
/// <param name="specVersion">The Open API specification version.</param>
25
- public static void SerializeAsJson < T > ( this T element , Stream stream , OpenApiSpecVersion specVersion )
27
+ /// <param name="cancellationToken">The cancellation token.</param>
28
+ public static Task SerializeAsJsonAsync < T > ( this T element , Stream stream , OpenApiSpecVersion specVersion , CancellationToken cancellationToken = default )
26
29
where T : IOpenApiSerializable
27
30
{
28
- element . Serialize ( stream , specVersion , OpenApiFormat . Json ) ;
31
+ return element . SerializeAsync ( stream , specVersion , OpenApiFormat . Json , cancellationToken ) ;
29
32
}
30
33
31
34
/// <summary>
@@ -35,10 +38,11 @@ public static void SerializeAsJson<T>(this T element, Stream stream, OpenApiSpec
35
38
/// <param name="element">The Open API element.</param>
36
39
/// <param name="stream">The output stream.</param>
37
40
/// <param name="specVersion">The Open API specification version.</param>
38
- public static void SerializeAsYaml < T > ( this T element , Stream stream , OpenApiSpecVersion specVersion )
41
+ /// <param name="cancellationToken">The cancellation token.</param>
42
+ public static Task SerializeAsYamlAsync < T > ( this T element , Stream stream , OpenApiSpecVersion specVersion , CancellationToken cancellationToken = default )
39
43
where T : IOpenApiSerializable
40
44
{
41
- element . Serialize ( stream , specVersion , OpenApiFormat . Yaml ) ;
45
+ return element . SerializeAsync ( stream , specVersion , OpenApiFormat . Yaml , cancellationToken ) ;
42
46
}
43
47
44
48
/// <summary>
@@ -50,14 +54,16 @@ public static void SerializeAsYaml<T>(this T element, Stream stream, OpenApiSpec
50
54
/// <param name="stream">The given stream.</param>
51
55
/// <param name="specVersion">The Open API specification version.</param>
52
56
/// <param name="format">The output format (JSON or YAML).</param>
53
- public static void Serialize < T > (
57
+ /// <param name="cancellationToken">The cancellation token.</param>
58
+ public static Task SerializeAsync < T > (
54
59
this T element ,
55
60
Stream stream ,
56
61
OpenApiSpecVersion specVersion ,
57
- OpenApiFormat format )
62
+ OpenApiFormat format ,
63
+ CancellationToken cancellationToken = default )
58
64
where T : IOpenApiSerializable
59
65
{
60
- element . Serialize ( stream , specVersion , format , null ) ;
66
+ return element . SerializeAsync ( stream , specVersion , format , null , cancellationToken ) ;
61
67
}
62
68
63
69
/// <summary>
@@ -70,12 +76,14 @@ public static void Serialize<T>(
70
76
/// <param name="specVersion">The Open API specification version.</param>
71
77
/// <param name="format">The output format (JSON or YAML).</param>
72
78
/// <param name="settings">Provide configuration settings for controlling writing output</param>
73
- public static void Serialize < T > (
79
+ /// <param name="cancellationToken">The cancellation token.</param>
80
+ public static Task SerializeAsync < T > (
74
81
this T element ,
75
82
Stream stream ,
76
83
OpenApiSpecVersion specVersion ,
77
84
OpenApiFormat format ,
78
- OpenApiWriterSettings settings )
85
+ OpenApiWriterSettings settings ,
86
+ CancellationToken cancellationToken = default )
79
87
where T : IOpenApiSerializable
80
88
{
81
89
Utils . CheckArgumentNull ( stream ) ;
@@ -88,7 +96,7 @@ public static void Serialize<T>(
88
96
OpenApiFormat . Yaml => new OpenApiYamlWriter ( streamWriter , settings ) ,
89
97
_ => throw new OpenApiException ( string . Format ( SRResource . OpenApiFormatNotSupported , format ) ) ,
90
98
} ;
91
- element . Serialize ( writer , specVersion ) ;
99
+ return element . SerializeAsync ( writer , specVersion , cancellationToken ) ;
92
100
}
93
101
94
102
/// <summary>
@@ -98,7 +106,8 @@ public static void Serialize<T>(
98
106
/// <param name="element">The Open API element.</param>
99
107
/// <param name="writer">The output writer.</param>
100
108
/// <param name="specVersion">Version of the specification the output should conform to</param>
101
- public static void Serialize < T > ( this T element , IOpenApiWriter writer , OpenApiSpecVersion specVersion )
109
+ /// <param name="cancellationToken">The cancellation token.</param>
110
+ public static Task SerializeAsync < T > ( this T element , IOpenApiWriter writer , OpenApiSpecVersion specVersion , CancellationToken cancellationToken = default )
102
111
where T : IOpenApiSerializable
103
112
{
104
113
Utils . CheckArgumentNull ( element ) ;
@@ -122,7 +131,7 @@ public static void Serialize<T>(this T element, IOpenApiWriter writer, OpenApiSp
122
131
throw new OpenApiException ( string . Format ( SRResource . OpenApiSpecVersionNotSupported , specVersion ) ) ;
123
132
}
124
133
125
- writer . Flush ( ) ;
134
+ return writer . FlushAsync ( cancellationToken ) ;
126
135
}
127
136
128
137
/// <summary>
@@ -131,12 +140,14 @@ public static void Serialize<T>(this T element, IOpenApiWriter writer, OpenApiSp
131
140
/// <typeparam name="T">the <see cref="IOpenApiSerializable"/></typeparam>
132
141
/// <param name="element">The Open API element.</param>
133
142
/// <param name="specVersion">The Open API specification version.</param>
134
- public static string SerializeAsJson < T > (
143
+ /// <param name="cancellationToken">The cancellation token.</param>
144
+ public static Task < string > SerializeAsJsonAsync < T > (
135
145
this T element ,
136
- OpenApiSpecVersion specVersion )
146
+ OpenApiSpecVersion specVersion ,
147
+ CancellationToken cancellationToken = default )
137
148
where T : IOpenApiSerializable
138
149
{
139
- return element . Serialize ( specVersion , OpenApiFormat . Json ) ;
150
+ return element . SerializeAsync ( specVersion , OpenApiFormat . Json , cancellationToken ) ;
140
151
}
141
152
142
153
/// <summary>
@@ -145,12 +156,14 @@ public static string SerializeAsJson<T>(
145
156
/// <typeparam name="T">the <see cref="IOpenApiSerializable"/></typeparam>
146
157
/// <param name="element">The Open API element.</param>
147
158
/// <param name="specVersion">The Open API specification version.</param>
148
- public static string SerializeAsYaml < T > (
159
+ /// <param name="cancellationToken">The cancellation token.</param>
160
+ public static Task < string > SerializeAsYamlAsync < T > (
149
161
this T element ,
150
- OpenApiSpecVersion specVersion )
162
+ OpenApiSpecVersion specVersion ,
163
+ CancellationToken cancellationToken = default )
151
164
where T : IOpenApiSerializable
152
165
{
153
- return element . Serialize ( specVersion , OpenApiFormat . Yaml ) ;
166
+ return element . SerializeAsync ( specVersion , OpenApiFormat . Yaml , cancellationToken ) ;
154
167
}
155
168
156
169
/// <summary>
@@ -160,20 +173,26 @@ public static string SerializeAsYaml<T>(
160
173
/// <param name="element">The Open API element.</param>
161
174
/// <param name="specVersion">The Open API specification version.</param>
162
175
/// <param name="format">Open API document format.</param>
163
- public static string Serialize < T > (
176
+ /// <param name="cancellationToken">The cancellation token.</param>
177
+ public static async Task < string > SerializeAsync < T > (
164
178
this T element ,
165
179
OpenApiSpecVersion specVersion ,
166
- OpenApiFormat format )
180
+ OpenApiFormat format ,
181
+ CancellationToken cancellationToken = default )
167
182
where T : IOpenApiSerializable
168
183
{
169
184
Utils . CheckArgumentNull ( element ) ;
170
185
171
186
using var stream = new MemoryStream ( ) ;
172
- element . Serialize ( stream , specVersion , format ) ;
187
+ await element . SerializeAsync ( stream , specVersion , format , cancellationToken ) . ConfigureAwait ( false ) ;
173
188
stream . Position = 0 ;
174
189
175
190
using var streamReader = new StreamReader ( stream ) ;
176
- return streamReader . ReadToEnd ( ) ;
191
+ #if NET7_0_OR_GREATER
192
+ return await streamReader . ReadToEndAsync ( cancellationToken ) . ConfigureAwait ( false ) ;
193
+ #else
194
+ return await streamReader . ReadToEndAsync ( ) . ConfigureAwait ( false ) ;
195
+ #endif
177
196
}
178
197
}
179
198
}
0 commit comments