Skip to content

Commit 5930916

Browse files
committed
fix: normalized override implementation for parameter types serialization in v2
Signed-off-by: Vincent Biret <[email protected]>
1 parent 00721e1 commit 5930916

File tree

1 file changed

+54
-40
lines changed

1 file changed

+54
-40
lines changed

src/Microsoft.OpenApi/Models/OpenApiParameter.cs

Lines changed: 54 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -165,50 +165,25 @@ internal void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion versio
165165

166166
writer.WriteEndObject();
167167
}
168-
169-
/// <inheritdoc/>
170-
public void SerializeAsV2(IOpenApiWriter writer)
168+
/// <summary>
169+
/// Write the "in" property for V2 serialization.
170+
/// </summary>
171+
/// <param name="writer">Writer to use for the serialization</param>
172+
internal virtual void WriteInPropertyForV2(IOpenApiWriter writer)
171173
{
172-
Utils.CheckArgumentNull(writer);
173-
174-
writer.WriteStartObject();
175-
176-
// in
177-
if (this is OpenApiFormDataParameter)
178-
{
179-
writer.WriteProperty(OpenApiConstants.In, "formData");
180-
}
181-
else if (this is OpenApiBodyParameter)
182-
{
183-
writer.WriteProperty(OpenApiConstants.In, "body");
184-
}
185-
else
186-
{
187-
writer.WriteProperty(OpenApiConstants.In, In?.GetDisplayName());
188-
}
189-
190-
// name
191-
writer.WriteProperty(OpenApiConstants.Name, Name);
192-
193-
// description
194-
writer.WriteProperty(OpenApiConstants.Description, Description);
195-
196-
// required
197-
writer.WriteProperty(OpenApiConstants.Required, Required, false);
198-
199-
// deprecated
200-
writer.WriteProperty(OpenApiConstants.Deprecated, Deprecated, false);
201-
202-
var extensionsClone = Extensions is not null ? new Dictionary<string, IOpenApiExtension>(Extensions) : null;
174+
writer.WriteProperty(OpenApiConstants.In, In?.GetDisplayName());
175+
}
203176

204-
// schema
205-
if (this is OpenApiBodyParameter)
206-
{
207-
writer.WriteOptionalObject(OpenApiConstants.Schema, Schema, (w, s) => s.SerializeAsV2(w));
208-
}
177+
/// <summary>
178+
/// Write the request body schema for V2 serialization.
179+
/// </summary>
180+
/// <param name="writer">Writer to use for the serialization</param>
181+
/// <param name="extensionsClone">Extensions clone</param>
182+
internal virtual void WriteRequestBodySchemaForV2(IOpenApiWriter writer, Dictionary<string, IOpenApiExtension>? extensionsClone)
183+
{
209184
// In V2 parameter's type can't be a reference to a custom object schema or can't be of type object
210185
// So in that case map the type as string.
211-
else if (Schema is OpenApiSchemaReference { UnresolvedReference: true } || (Schema?.Type & JsonSchemaType.Object) == JsonSchemaType.Object)
186+
if (Schema is OpenApiSchemaReference { UnresolvedReference: true } || (Schema?.Type & JsonSchemaType.Object) == JsonSchemaType.Object)
212187
{
213188
writer.WriteProperty(OpenApiConstants.Type, "string");
214189
}
@@ -270,7 +245,34 @@ public void SerializeAsV2(IOpenApiWriter writer)
270245
}
271246
}
272247
}
248+
}
249+
250+
/// <inheritdoc/>
251+
public void SerializeAsV2(IOpenApiWriter writer)
252+
{
253+
Utils.CheckArgumentNull(writer);
254+
255+
writer.WriteStartObject();
256+
257+
// in
258+
WriteInPropertyForV2(writer);
273259

260+
// name
261+
writer.WriteProperty(OpenApiConstants.Name, Name);
262+
263+
// description
264+
writer.WriteProperty(OpenApiConstants.Description, Description);
265+
266+
// required
267+
writer.WriteProperty(OpenApiConstants.Required, Required, false);
268+
269+
// deprecated
270+
writer.WriteProperty(OpenApiConstants.Deprecated, Deprecated, false);
271+
272+
var extensionsClone = Extensions is not null ? new Dictionary<string, IOpenApiExtension>(Extensions) : null;
273+
274+
// schema
275+
WriteRequestBodySchemaForV2(writer, extensionsClone);
274276
//examples
275277
if (Examples != null && Examples.Any())
276278
{
@@ -315,12 +317,24 @@ public IOpenApiParameter CreateShallowCopy()
315317
/// </summary>
316318
internal class OpenApiBodyParameter : OpenApiParameter
317319
{
320+
internal override void WriteRequestBodySchemaForV2(IOpenApiWriter writer, Dictionary<string, IOpenApiExtension>? extensionsClone)
321+
{
322+
writer.WriteOptionalObject(OpenApiConstants.Schema, Schema, (w, s) => s.SerializeAsV2(w));
323+
}
324+
internal override void WriteInPropertyForV2(IOpenApiWriter writer)
325+
{
326+
writer.WriteProperty(OpenApiConstants.In, "body");
327+
}
318328
}
319329

320330
/// <summary>
321331
/// Form parameter class to propagate information needed for <see cref="OpenApiParameter.SerializeAsV2"/>
322332
/// </summary>
323333
internal class OpenApiFormDataParameter : OpenApiParameter
324334
{
335+
internal override void WriteInPropertyForV2(IOpenApiWriter writer)
336+
{
337+
writer.WriteProperty(OpenApiConstants.In, "formData");
338+
}
325339
}
326340
}

0 commit comments

Comments
 (0)