Skip to content

Commit 8fd03c9

Browse files
committed
Clean up serializers
1 parent 5901f49 commit 8fd03c9

23 files changed

+153
-579
lines changed

src/Microsoft.OpenApi/Interfaces/IOpenApiReferenceable.cs

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,5 @@ public interface IOpenApiReferenceable : IOpenApiSerializable
2020
/// Reference object.
2121
/// </summary>
2222
OpenApiReference Reference { get; set; }
23-
24-
/// <summary>
25-
/// Serialize to OpenAPI V31 document without using reference.
26-
/// </summary>
27-
void SerializeAsV31WithoutReference(IOpenApiWriter writer);
28-
29-
/// <summary>
30-
/// Serialize to OpenAPI V3 document without using reference.
31-
/// </summary>
32-
void SerializeAsV3WithoutReference(IOpenApiWriter writer);
33-
34-
/// <summary>
35-
/// Serialize to OpenAPI V2 document without using reference.
36-
/// </summary>
37-
void SerializeAsV2WithoutReference(IOpenApiWriter writer);
38-
3923
}
4024
}

src/Microsoft.OpenApi/Models/OpenApiCallback.cs

Lines changed: 4 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -73,56 +73,22 @@ public void AddPathItem(RuntimeExpression expression, OpenApiPathItem pathItem)
7373
/// <exception cref="System.NotImplementedException"></exception>
7474
public virtual void SerializeAsV31(IOpenApiWriter writer)
7575
{
76-
SerializeInternal(writer, (writer, element) => element.SerializeAsV31(writer),
77-
(writer, referenceElement) => referenceElement.SerializeAsV31WithoutReference(writer));
76+
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer));
7877
}
7978

8079
/// <summary>
8180
/// Serialize <see cref="OpenApiCallback"/> to Open Api v3.0
8281
/// </summary>
8382
public virtual void SerializeAsV3(IOpenApiWriter writer)
8483
{
85-
SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer),
86-
(writer, referenceElement) => referenceElement.SerializeAsV3WithoutReference(writer));
84+
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer));
8785
}
8886

89-
/// <summary>
90-
/// Serialize <see cref="OpenApiCallback"/>
91-
/// </summary>
92-
/// <param name="writer"></param>
93-
/// <param name="callback"></param>
94-
/// <param name="action"></param>
95-
private void SerializeInternal(IOpenApiWriter writer,
96-
Action<IOpenApiWriter, IOpenApiSerializable> callback,
97-
Action<IOpenApiWriter, IOpenApiReferenceable> action)
87+
internal void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
88+
Action<IOpenApiWriter, IOpenApiSerializable> callback)
9889
{
9990
Utils.CheckArgumentNull(writer);
10091

101-
var target = this;
102-
action(writer, target);
103-
}
104-
105-
/// <summary>
106-
/// Serialize to OpenAPI V31 document without using reference.
107-
/// </summary>
108-
public virtual void SerializeAsV31WithoutReference(IOpenApiWriter writer)
109-
{
110-
SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1,
111-
(writer, element) => element.SerializeAsV31(writer));
112-
}
113-
114-
/// <summary>
115-
/// Serialize to OpenAPI V3 document without using reference.
116-
/// </summary>
117-
public virtual void SerializeAsV3WithoutReference(IOpenApiWriter writer)
118-
{
119-
SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0,
120-
(writer, element) => element.SerializeAsV3(writer));
121-
}
122-
123-
internal void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version,
124-
Action<IOpenApiWriter, IOpenApiSerializable> callback)
125-
{
12692
writer.WriteStartObject();
12793

12894
// path items
@@ -144,14 +110,5 @@ public void SerializeAsV2(IOpenApiWriter writer)
144110
{
145111
// Callback object does not exist in V2.
146112
}
147-
148-
/// <summary>
149-
/// Serialize to OpenAPI V2 document without using reference.
150-
/// </summary>
151-
152-
public void SerializeAsV2WithoutReference(IOpenApiWriter writer)
153-
{
154-
// Callback object does not exist in V2.
155-
}
156113
}
157114
}

src/Microsoft.OpenApi/Models/OpenApiComponents.cs

Lines changed: 24 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.Collections.Generic;
66
using System.Linq;
77
using Microsoft.OpenApi.Interfaces;
8+
using Microsoft.OpenApi.Models.References;
89
using Microsoft.OpenApi.Writers;
910

1011

@@ -120,11 +121,9 @@ public void SerializeAsV31(IOpenApiWriter writer)
120121
PathItems,
121122
(w, key, component) =>
122123
{
123-
if (component.Reference != null &&
124-
component.Reference.Type == ReferenceType.Schema &&
125-
component.Reference.Id == key)
124+
if (component is OpenApiPathItemReference reference)
126125
{
127-
component.SerializeAsV31WithoutReference(w);
126+
reference.SerializeAsV31(w);
128127
}
129128
else
130129
{
@@ -133,7 +132,7 @@ public void SerializeAsV31(IOpenApiWriter writer)
133132
});
134133

135134
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer),
136-
(writer, referenceElement) => referenceElement.SerializeAsV31WithoutReference(writer));
135+
(writer, referenceElement) => referenceElement.SerializeAsV31(writer));
137136
}
138137

139138
/// <summary>
@@ -154,7 +153,7 @@ public void SerializeAsV3(IOpenApiWriter writer)
154153

155154
writer.WriteStartObject();
156155
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer),
157-
(writer, referenceElement) => referenceElement.SerializeAsV3WithoutReference(writer));
156+
(writer, referenceElement) => referenceElement.SerializeAsV3(writer));
158157
}
159158

160159
/// <summary>
@@ -172,14 +171,13 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version
172171
Schemas,
173172
(w, key, component) =>
174173
{
175-
if (component.Reference is { Type: ReferenceType.Schema } &&
176-
component.Reference.Id == key)
174+
if (component is OpenApiSchemaReference reference)
177175
{
178-
component.SerializeAsV3WithoutReference(w);
176+
action(w, reference);
179177
}
180178
else
181179
{
182-
component.SerializeAsV3(w);
180+
callback(w, component);
183181
}
184182
});
185183

@@ -189,11 +187,9 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version
189187
Responses,
190188
(w, key, component) =>
191189
{
192-
if (component.Reference != null &&
193-
component.Reference.Type == ReferenceType.Response &&
194-
string.Equals(component.Reference.Id, key, StringComparison.OrdinalIgnoreCase))
190+
if (component is OpenApiResponseReference reference)
195191
{
196-
action(w, component);
192+
action(w, reference);
197193
}
198194
else
199195
{
@@ -207,11 +203,9 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version
207203
Parameters,
208204
(w, key, component) =>
209205
{
210-
if (component.Reference != null &&
211-
component.Reference.Type == ReferenceType.Parameter &&
212-
string.Equals(component.Reference.Id, key, StringComparison.OrdinalIgnoreCase))
206+
if (component is OpenApiParameterReference reference)
213207
{
214-
action(w, component);
208+
action(w, reference);
215209
}
216210
else
217211
{
@@ -225,11 +219,9 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version
225219
Examples,
226220
(w, key, component) =>
227221
{
228-
if (component.Reference != null &&
229-
component.Reference.Type == ReferenceType.Example &&
230-
string.Equals(component.Reference.Id, key, StringComparison.OrdinalIgnoreCase))
222+
if (component is OpenApiExampleReference reference)
231223
{
232-
action(writer, component);
224+
action(w, reference);
233225
}
234226
else
235227
{
@@ -243,12 +235,9 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version
243235
RequestBodies,
244236
(w, key, component) =>
245237
{
246-
if (component.Reference != null &&
247-
component.Reference.Type == ReferenceType.RequestBody &&
248-
string.Equals(component.Reference.Id, key, StringComparison.OrdinalIgnoreCase))
249-
238+
if (component is OpenApiRequestBodyReference reference)
250239
{
251-
action(w, component);
240+
action(w, reference);
252241
}
253242
else
254243
{
@@ -262,11 +251,9 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version
262251
Headers,
263252
(w, key, component) =>
264253
{
265-
if (component.Reference != null &&
266-
component.Reference.Type == ReferenceType.Header &&
267-
string.Equals(component.Reference.Id, key, StringComparison.OrdinalIgnoreCase))
254+
if (component is OpenApiHeaderReference reference)
268255
{
269-
action(w, component);
256+
action(w, reference);
270257
}
271258
else
272259
{
@@ -280,11 +267,9 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version
280267
SecuritySchemes,
281268
(w, key, component) =>
282269
{
283-
if (component.Reference != null &&
284-
component.Reference.Type == ReferenceType.SecurityScheme &&
285-
string.Equals(component.Reference.Id, key, StringComparison.OrdinalIgnoreCase))
270+
if (component is OpenApiSecuritySchemeReference reference)
286271
{
287-
action(w, component);
272+
action(w, reference);
288273
}
289274
else
290275
{
@@ -298,11 +283,9 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version
298283
Links,
299284
(w, key, component) =>
300285
{
301-
if (component.Reference != null &&
302-
component.Reference.Type == ReferenceType.Link &&
303-
string.Equals(component.Reference.Id, key, StringComparison.OrdinalIgnoreCase))
286+
if (component is OpenApiLinkReference reference)
304287
{
305-
action(w, component);
288+
action(w, reference);
306289
}
307290
else
308291
{
@@ -316,11 +299,9 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version
316299
Callbacks,
317300
(w, key, component) =>
318301
{
319-
if (component.Reference != null &&
320-
component.Reference.Type == ReferenceType.Callback &&
321-
string.Equals(component.Reference.Id, key, StringComparison.OrdinalIgnoreCase))
302+
if (component is OpenApiCallbackReference reference)
322303
{
323-
action(w, component);
304+
action(w, reference);
324305
}
325306
else
326307
{

0 commit comments

Comments
 (0)