5
5
using System . Collections . Generic ;
6
6
using Microsoft . OpenApi . Models ;
7
7
using Microsoft . OpenApi . Interfaces ;
8
+ using Microsoft . OpenApi . Any ;
9
+ using Microsoft . OpenApi . Extensions ;
8
10
9
11
namespace Microsoft . OpenApi . Services
10
12
{
@@ -46,12 +48,15 @@ public void Walk(OpenApiDocument doc)
46
48
/// <param name="tags"></param>
47
49
internal void Walk ( IList < OpenApiTag > tags )
48
50
{
51
+ _visitor . Enter ( OpenApiConstants . Tags ) ;
49
52
_visitor . Visit ( tags ) ;
50
53
51
54
foreach ( var tag in tags )
52
55
{
53
56
Walk ( tag ) ;
54
57
}
58
+ _visitor . Exit ( ) ;
59
+
55
60
}
56
61
57
62
/// <summary>
@@ -60,7 +65,9 @@ internal void Walk(IList<OpenApiTag> tags)
60
65
/// <param name="externalDocs"></param>
61
66
internal void Walk ( OpenApiExternalDocs externalDocs )
62
67
{
68
+ _visitor . Enter ( OpenApiConstants . ExternalDocs ) ;
63
69
_visitor . Visit ( externalDocs ) ;
70
+ _visitor . Exit ( ) ;
64
71
}
65
72
66
73
/// <summary>
@@ -69,7 +76,9 @@ internal void Walk(OpenApiExternalDocs externalDocs)
69
76
/// <param name="components"></param>
70
77
internal void Walk ( OpenApiComponents components )
71
78
{
79
+ _visitor . Enter ( OpenApiConstants . Components ) ;
72
80
_visitor . Visit ( components ) ;
81
+ _visitor . Exit ( ) ;
73
82
}
74
83
75
84
/// <summary>
@@ -78,11 +87,15 @@ internal void Walk(OpenApiComponents components)
78
87
/// <param name="paths"></param>
79
88
internal void Walk ( OpenApiPaths paths )
80
89
{
90
+ _visitor . Enter ( OpenApiConstants . Paths ) ;
81
91
_visitor . Visit ( paths ) ;
82
- foreach ( var pathItem in paths . Values )
92
+ foreach ( var pathItem in paths )
83
93
{
84
- Walk ( pathItem ) ;
94
+ _visitor . Enter ( pathItem . Key . Replace ( "/" , "~1" ) ) ;
95
+ Walk ( pathItem . Value ) ;
96
+ _visitor . Exit ( ) ;
85
97
}
98
+ _visitor . Exit ( ) ;
86
99
}
87
100
88
101
/// <summary>
@@ -91,6 +104,7 @@ internal void Walk(OpenApiPaths paths)
91
104
/// <param name="servers"></param>
92
105
internal void Walk ( IList < OpenApiServer > servers )
93
106
{
107
+ _visitor . Enter ( OpenApiConstants . Servers ) ;
94
108
_visitor . Visit ( servers ) ;
95
109
96
110
// Visit Servers
@@ -101,6 +115,7 @@ internal void Walk(IList<OpenApiServer> servers)
101
115
Walk ( server ) ;
102
116
}
103
117
}
118
+ _visitor . Exit ( ) ;
104
119
}
105
120
106
121
/// <summary>
@@ -109,10 +124,12 @@ internal void Walk(IList<OpenApiServer> servers)
109
124
/// <param name="info"></param>
110
125
internal void Walk ( OpenApiInfo info )
111
126
{
127
+ _visitor . Enter ( OpenApiConstants . Info ) ;
112
128
_visitor . Visit ( info ) ;
113
129
Walk ( info . Contact ) ;
114
130
Walk ( info . License ) ;
115
131
Walk ( info as IOpenApiExtensible ) ;
132
+ _visitor . Exit ( ) ;
116
133
}
117
134
118
135
/// <summary>
@@ -122,6 +139,21 @@ internal void Walk(OpenApiInfo info)
122
139
internal void Walk ( IOpenApiExtensible openApiExtensible )
123
140
{
124
141
_visitor . Visit ( openApiExtensible ) ;
142
+ foreach ( var item in openApiExtensible . Extensions )
143
+ {
144
+ _visitor . Enter ( item . Key ) ;
145
+ Walk ( item . Value ) ;
146
+ _visitor . Exit ( ) ;
147
+ }
148
+ }
149
+
150
+ /// <summary>
151
+ /// Visits <see cref="IOpenApiExtension"/>
152
+ /// </summary>
153
+ /// <param name="extension"></param>
154
+ internal void Walk ( IOpenApiExtension extension )
155
+ {
156
+ _visitor . Visit ( extension ) ;
125
157
}
126
158
127
159
/// <summary>
@@ -130,7 +162,9 @@ internal void Walk(IOpenApiExtensible openApiExtensible)
130
162
/// <param name="license"></param>
131
163
internal void Walk ( OpenApiLicense license )
132
164
{
165
+ _visitor . Enter ( OpenApiConstants . License ) ;
133
166
_visitor . Visit ( license ) ;
167
+ _visitor . Exit ( ) ;
134
168
}
135
169
136
170
/// <summary>
@@ -139,7 +173,9 @@ internal void Walk(OpenApiLicense license)
139
173
/// <param name="contact"></param>
140
174
internal void Walk ( OpenApiContact contact )
141
175
{
176
+ _visitor . Enter ( OpenApiConstants . Contact ) ;
142
177
_visitor . Visit ( contact ) ;
178
+ _visitor . Exit ( ) ;
143
179
}
144
180
145
181
/// <summary>
@@ -159,12 +195,25 @@ internal void Walk(OpenApiTag tag)
159
195
/// <param name="server"></param>
160
196
internal void Walk ( OpenApiServer server )
161
197
{
198
+ _visitor . Enter ( OpenApiConstants . Server ) ;
162
199
_visitor . Visit ( server ) ;
163
- foreach ( var variable in server . Variables . Values )
200
+ Walk ( server . Variables ) ;
201
+ _visitor . Visit ( server as IOpenApiExtensible ) ;
202
+ _visitor . Exit ( ) ;
203
+ }
204
+
205
+ /// <summary>
206
+ /// Visits dictionary of <see cref="OpenApiServerVariable"/>
207
+ /// </summary>
208
+ /// <param name="serverVariables"></param>
209
+ internal void Walk ( IDictionary < string , OpenApiServerVariable > serverVariables )
210
+ {
211
+ foreach ( var variable in serverVariables )
164
212
{
165
- Walk ( variable ) ;
213
+ _visitor . Enter ( variable . Key ) ;
214
+ Walk ( variable . Value ) ;
215
+ _visitor . Exit ( ) ;
166
216
}
167
- _visitor . Visit ( server as IOpenApiExtensible ) ;
168
217
}
169
218
170
219
/// <summary>
@@ -184,7 +233,6 @@ internal void Walk(OpenApiServerVariable serverVariable)
184
233
internal void Walk ( OpenApiPathItem pathItem )
185
234
{
186
235
_visitor . Visit ( pathItem ) ;
187
-
188
236
Walk ( pathItem . Operations ) ;
189
237
_visitor . Visit ( pathItem as IOpenApiExtensible ) ;
190
238
}
@@ -196,9 +244,11 @@ internal void Walk(OpenApiPathItem pathItem)
196
244
internal void Walk ( IDictionary < OperationType , OpenApiOperation > operations )
197
245
{
198
246
_visitor . Visit ( operations ) ;
199
- foreach ( var operation in operations . Values )
247
+ foreach ( var operation in operations )
200
248
{
201
- Walk ( operation ) ;
249
+ _visitor . Enter ( operation . Key . GetDisplayName ( ) ) ;
250
+ Walk ( operation . Value ) ;
251
+ _visitor . Exit ( ) ;
202
252
}
203
253
}
204
254
@@ -224,11 +274,13 @@ internal void Walk(IList<OpenApiParameter> parameters)
224
274
{
225
275
if ( parameters != null )
226
276
{
277
+ _visitor . Enter ( OpenApiConstants . Parameters ) ;
227
278
_visitor . Visit ( parameters ) ;
228
279
foreach ( var parameter in parameters )
229
280
{
230
281
Walk ( parameter ) ;
231
282
}
283
+ _visitor . Exit ( ) ;
232
284
}
233
285
}
234
286
@@ -252,14 +304,18 @@ internal void Walk(OpenApiResponses responses)
252
304
{
253
305
if ( responses != null )
254
306
{
307
+ _visitor . Enter ( OpenApiConstants . Responses ) ;
255
308
_visitor . Visit ( responses ) ;
256
309
257
- foreach ( var response in responses . Values )
310
+ foreach ( var response in responses )
258
311
{
259
- Walk ( response ) ;
312
+ _visitor . Enter ( response . Key ) ;
313
+ Walk ( response . Value ) ;
314
+ _visitor . Exit ( ) ;
260
315
}
261
316
262
317
Walk ( responses as IOpenApiExtensible ) ;
318
+ _visitor . Exit ( ) ;
263
319
}
264
320
}
265
321
@@ -314,11 +370,15 @@ internal void Walk(IDictionary<string, OpenApiMediaType> content)
314
370
return ;
315
371
}
316
372
373
+ _visitor . Enter ( OpenApiConstants . Content ) ;
317
374
_visitor . Visit ( content ) ;
318
- foreach ( var mediaType in content . Values )
375
+ foreach ( var mediaType in content )
319
376
{
320
- Walk ( mediaType ) ;
377
+ _visitor . Enter ( mediaType . Key ) ;
378
+ Walk ( mediaType . Value ) ;
379
+ _visitor . Exit ( ) ;
321
380
}
381
+ _visitor . Exit ( ) ;
322
382
}
323
383
324
384
/// <summary>
@@ -381,6 +441,15 @@ internal void Walk(IDictionary<string,OpenApiExample> examples)
381
441
}
382
442
}
383
443
444
+ /// <summary>
445
+ /// Visits <see cref="IOpenApiAny"/> and child objects
446
+ /// </summary>
447
+ /// <param name="example"></param>
448
+ internal void Walk ( IOpenApiAny example )
449
+ {
450
+ _visitor . Visit ( example ) ;
451
+ }
452
+
384
453
/// <summary>
385
454
/// Visits <see cref="OpenApiExample"/> and child objects
386
455
/// </summary>
@@ -517,6 +586,8 @@ internal void Walk(IOpenApiElement element)
517
586
case IList < OpenApiTag > e : Walk ( e ) ; break ;
518
587
case OpenApiXml e : Walk ( e ) ; break ;
519
588
case IOpenApiExtensible e : Walk ( e ) ; break ;
589
+ case IOpenApiExtension e : Walk ( e ) ; break ;
590
+
520
591
}
521
592
}
522
593
0 commit comments