@@ -61,14 +61,15 @@ public static ReadResult Load(MemoryStream stream,
61
61
/// <param name="input">Stream containing OpenAPI description to parse.</param>
62
62
/// <param name="version">Version of the OpenAPI specification that the fragment conforms to.</param>
63
63
/// <param name="format"></param>
64
+ /// <param name="openApiDocument">The OpenApiDocument object to which the fragment belongs, used to lookup references.</param>
64
65
/// <param name="diagnostic">Returns diagnostic object containing errors detected during parsing.</param>
65
66
/// <param name="settings">The OpenApiReader settings.</param>
66
67
/// <returns>Instance of newly created IOpenApiElement.</returns>
67
68
/// <returns>The OpenAPI element.</returns>
68
- public static T Load < T > ( MemoryStream input , OpenApiSpecVersion version , string format , out OpenApiDiagnostic diagnostic , OpenApiReaderSettings settings = null ) where T : IOpenApiElement
69
+ public static T Load < T > ( MemoryStream input , OpenApiSpecVersion version , string format , OpenApiDocument openApiDocument , out OpenApiDiagnostic diagnostic , OpenApiReaderSettings settings = null ) where T : IOpenApiElement
69
70
{
70
71
format ??= InspectStreamFormat ( input ) ;
71
- return OpenApiReaderRegistry . GetReader ( format ) . ReadFragment < T > ( input , version , out diagnostic , settings ) ;
72
+ return OpenApiReaderRegistry . GetReader ( format ) . ReadFragment < T > ( input , version , openApiDocument , out diagnostic , settings ) ;
72
73
}
73
74
74
75
/// <summary>
@@ -91,13 +92,14 @@ public static async Task<ReadResult> LoadAsync(string url, OpenApiReaderSettings
91
92
/// <param name="url">The path to the OpenAPI file</param>
92
93
/// <param name="version">Version of the OpenAPI specification that the fragment conforms to.</param>
93
94
/// <param name="settings">The OpenApiReader settings.</param>
95
+ /// <param name="openApiDocument">The OpenApiDocument object to which the fragment belongs, used to lookup references.</param>
94
96
/// <param name="token"></param>
95
97
/// <returns>Instance of newly created IOpenApiElement.</returns>
96
98
/// <returns>The OpenAPI element.</returns>
97
- public static async Task < T > LoadAsync < T > ( string url , OpenApiSpecVersion version , OpenApiReaderSettings settings = null , CancellationToken token = default ) where T : IOpenApiElement
99
+ public static async Task < T > LoadAsync < T > ( string url , OpenApiSpecVersion version , OpenApiDocument openApiDocument , OpenApiReaderSettings settings = null , CancellationToken token = default ) where T : IOpenApiElement
98
100
{
99
101
var ( stream , format ) = await RetrieveStreamAndFormatAsync ( url , token ) . ConfigureAwait ( false ) ;
100
- return await LoadAsync < T > ( stream , version , format , settings , token ) ;
102
+ return await LoadAsync < T > ( stream , version , openApiDocument , format , settings , token ) ;
101
103
}
102
104
103
105
/// <summary>
@@ -145,27 +147,30 @@ public static async Task<ReadResult> LoadAsync(Stream input, string format = nul
145
147
/// <typeparam name="T"></typeparam>
146
148
/// <param name="input"></param>
147
149
/// <param name="version"></param>
150
+ /// <param name="openApiDocument">The document used to lookup tag or schema references.</param>
148
151
/// <param name="format"></param>
149
152
/// <param name="settings"></param>
150
153
/// <param name="token"></param>
151
154
/// <returns></returns>
152
155
public static async Task < T > LoadAsync < T > ( Stream input ,
153
156
OpenApiSpecVersion version ,
157
+ OpenApiDocument openApiDocument ,
154
158
string format = null ,
155
159
OpenApiReaderSettings settings = null ,
156
160
CancellationToken token = default ) where T : IOpenApiElement
157
161
{
162
+ Utils . CheckArgumentNull ( openApiDocument ) ;
158
163
if ( input is null ) throw new ArgumentNullException ( nameof ( input ) ) ;
159
164
if ( input is MemoryStream memoryStream )
160
165
{
161
- return Load < T > ( memoryStream , version , format , out var _ , settings ) ;
166
+ return Load < T > ( memoryStream , version , format , openApiDocument , out var _ , settings ) ;
162
167
}
163
168
else
164
169
{
165
170
memoryStream = new MemoryStream ( ) ;
166
171
await input . CopyToAsync ( memoryStream , 81920 , token ) . ConfigureAwait ( false ) ;
167
172
memoryStream . Position = 0 ;
168
- return Load < T > ( memoryStream , version , format , out var _ , settings ) ;
173
+ return Load < T > ( memoryStream , version , format , openApiDocument , out var _ , settings ) ;
169
174
}
170
175
}
171
176
@@ -195,12 +200,14 @@ public static ReadResult Parse(string input,
195
200
/// </summary>
196
201
/// <param name="input">The input string.</param>
197
202
/// <param name="version"></param>
203
+ /// <param name="openApiDocument">The OpenApiDocument object to which the fragment belongs, used to lookup references.</param>
198
204
/// <param name="diagnostic">The diagnostic entity containing information from the reading process.</param>
199
205
/// <param name="format">The Open API format</param>
200
206
/// <param name="settings">The OpenApi reader settings.</param>
201
207
/// <returns>An OpenAPI document instance.</returns>
202
208
public static T Parse < T > ( string input ,
203
209
OpenApiSpecVersion version ,
210
+ OpenApiDocument openApiDocument ,
204
211
out OpenApiDiagnostic diagnostic ,
205
212
string format = null ,
206
213
OpenApiReaderSettings settings = null ) where T : IOpenApiElement
@@ -209,7 +216,7 @@ public static T Parse<T>(string input,
209
216
format ??= InspectInputFormat ( input ) ;
210
217
settings ??= new OpenApiReaderSettings ( ) ;
211
218
using var stream = new MemoryStream ( Encoding . UTF8 . GetBytes ( input ) ) ;
212
- return Load < T > ( stream , version , format , out diagnostic , settings ) ;
219
+ return Load < T > ( stream , version , format , openApiDocument , out diagnostic , settings ) ;
213
220
}
214
221
215
222
private static readonly OpenApiReaderSettings DefaultReaderSettings = new ( ) ;
0 commit comments