Skip to content

Commit 312abb0

Browse files
committed
Add an optional spec version parameter to serialize method to write out version-specific properties
1 parent c0f218a commit 312abb0

31 files changed

+79
-59
lines changed

src/Microsoft.OpenApi/Extensions/OpenApiSerializableExtensions.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,10 @@ public static void Serialize<T>(this T element, IOpenApiWriter writer, OpenApiSp
117117

118118
switch (specVersion)
119119
{
120+
case OpenApiSpecVersion.OpenApi3_1:
121+
element.SerializeAsV3(writer, OpenApiSpecVersion.OpenApi3_1);
122+
break;
123+
120124
case OpenApiSpecVersion.OpenApi3_0:
121125
element.SerializeAsV3(writer);
122126
break;

src/Microsoft.OpenApi/Interfaces/IOpenApiSerializable.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ public interface IOpenApiSerializable : IOpenApiElement
1414
/// Serialize Open API element to v3.0.
1515
/// </summary>
1616
/// <param name="writer">The writer.</param>
17-
void SerializeAsV3(IOpenApiWriter writer);
17+
/// <param name="specVersion">The OpenApi specification version.</param>
18+
void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion specVersion = OpenApiSpecVersion.OpenApi3_0);
1819

1920
/// <summary>
2021
/// Serialize Open API element to v2.0.

src/Microsoft.OpenApi/Models/OpenApiCallback.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public void AddPathItem(RuntimeExpression expression, OpenApiPathItem pathItem)
7979
/// <summary>
8080
/// Serialize <see cref="OpenApiCallback"/> to Open Api v3.0
8181
/// </summary>
82-
public void SerializeAsV3(IOpenApiWriter writer)
82+
public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0)
8383
{
8484
if (writer == null)
8585
{

src/Microsoft.OpenApi/Models/OpenApiComponents.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public OpenApiComponents(OpenApiComponents components)
9797
/// <summary>
9898
/// Serialize <see cref="OpenApiComponents"/> to Open Api v3.0.
9999
/// </summary>
100-
public void SerializeAsV3(IOpenApiWriter writer)
100+
public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0)
101101
{
102102
if (writer == null)
103103
{
@@ -293,8 +293,10 @@ public void SerializeAsV3(IOpenApiWriter writer)
293293
}
294294
});
295295

296-
// pathItems
297-
writer.WriteOptionalMap(
296+
// pathItems - only present in v3.1
297+
if(version == OpenApiSpecVersion.OpenApi3_1)
298+
{
299+
writer.WriteOptionalMap(
298300
OpenApiConstants.PathItems,
299301
PathItems,
300302
(w, key, component) =>
@@ -310,9 +312,10 @@ public void SerializeAsV3(IOpenApiWriter writer)
310312
component.SerializeAsV3(w);
311313
}
312314
});
313-
315+
}
316+
314317
// extensions
315-
writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0);
318+
writer.WriteExtensions(Extensions, version);
316319

317320
writer.WriteEndObject();
318321
}

src/Microsoft.OpenApi/Models/OpenApiContact.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,11 @@ public OpenApiContact(OpenApiContact contact)
5454
/// <summary>
5555
/// Serialize <see cref="OpenApiContact"/> to Open Api v3.0
5656
/// </summary>
57-
public void SerializeAsV3(IOpenApiWriter writer)
57+
public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0)
5858
{
59-
WriteInternal(writer, OpenApiSpecVersion.OpenApi3_0);
59+
WriteInternal(writer, version);
6060
}
61-
61+
6262
/// <summary>
6363
/// Serialize <see cref="OpenApiContact"/> to Open Api v2.0
6464
/// </summary>

src/Microsoft.OpenApi/Models/OpenApiDiscriminator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public OpenApiDiscriminator(OpenApiDiscriminator discriminator)
3939
/// <summary>
4040
/// Serialize <see cref="OpenApiDiscriminator"/> to Open Api v3.0
4141
/// </summary>
42-
public void SerializeAsV3(IOpenApiWriter writer)
42+
public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0)
4343
{
4444
if (writer == null)
4545
{

src/Microsoft.OpenApi/Models/OpenApiEncoding.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public OpenApiEncoding(OpenApiEncoding encoding)
7474
/// <summary>
7575
/// Serialize <see cref="OpenApiExternalDocs"/> to Open Api v3.0.
7676
/// </summary>
77-
public void SerializeAsV3(IOpenApiWriter writer)
77+
public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0)
7878
{
7979
if (writer == null)
8080
{
@@ -99,7 +99,7 @@ public void SerializeAsV3(IOpenApiWriter writer)
9999
writer.WriteProperty(OpenApiConstants.AllowReserved, AllowReserved, false);
100100

101101
// extensions
102-
writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0);
102+
writer.WriteExtensions(Extensions, version);
103103

104104
writer.WriteEndObject();
105105
}

src/Microsoft.OpenApi/Models/OpenApiExample.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public OpenApiExample(OpenApiExample example)
7676
/// <summary>
7777
/// Serialize <see cref="OpenApiExample"/> to Open Api v3.0
7878
/// </summary>
79-
public void SerializeAsV3(IOpenApiWriter writer)
79+
public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0)
8080
{
8181
if (writer == null)
8282
{

src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ protected OpenApiExtensibleDictionary(
4141
/// <summary>
4242
/// Serialize to Open Api v3.0
4343
/// </summary>
44-
public void SerializeAsV3(IOpenApiWriter writer)
44+
public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0)
4545
{
4646
if (writer == null)
4747
{
@@ -55,7 +55,7 @@ public void SerializeAsV3(IOpenApiWriter writer)
5555
writer.WriteRequiredObject(item.Key, item.Value, (w, p) => p.SerializeAsV3(w));
5656
}
5757

58-
writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0);
58+
writer.WriteExtensions(Extensions, version);
5959

6060
writer.WriteEndObject();
6161
}

src/Microsoft.OpenApi/Models/OpenApiExternalDocs.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@ public OpenApiExternalDocs(OpenApiExternalDocs externalDocs)
4747
/// <summary>
4848
/// Serialize <see cref="OpenApiExternalDocs"/> to Open Api v3.0.
4949
/// </summary>
50-
public void SerializeAsV3(IOpenApiWriter writer)
50+
public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0)
5151
{
52-
WriteInternal(writer, OpenApiSpecVersion.OpenApi3_0);
52+
WriteInternal(writer, version);
5353
}
54-
54+
5555
/// <summary>
5656
/// Serialize <see cref="OpenApiExternalDocs"/> to Open Api v2.0.
5757
/// </summary>

0 commit comments

Comments
 (0)