From 5741ae6767862b2253ad2026ae3627be8b2ac7b0 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 23 Jan 2023 15:55:01 +0300 Subject: [PATCH 01/20] Add root property jsonSchemaDialect and serialization and deserialization logic --- .../V3/OpenApiDocumentDeserializer.cs | 1 + .../Models/OpenApiConstants.cs | 5 +++ .../Models/OpenApiDocument.cs | 34 ++++++++++++++++--- 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/Microsoft.OpenApi.Readers/V3/OpenApiDocumentDeserializer.cs b/src/Microsoft.OpenApi.Readers/V3/OpenApiDocumentDeserializer.cs index cdf720237..858f13f0d 100644 --- a/src/Microsoft.OpenApi.Readers/V3/OpenApiDocumentDeserializer.cs +++ b/src/Microsoft.OpenApi.Readers/V3/OpenApiDocumentDeserializer.cs @@ -21,6 +21,7 @@ internal static partial class OpenApiV3Deserializer } /* Version is valid field but we already parsed it */ }, {"info", (o, n) => o.Info = LoadInfo(n)}, + {"jsonSchemaDialect", (o, n) => o.JsonSchemaDialect = n.GetScalarValue() }, {"servers", (o, n) => o.Servers = n.CreateList(LoadServer)}, {"paths", (o, n) => o.Paths = LoadPaths(n)}, {"webhooks", (o, n) => o.Webhooks = LoadPaths(n)}, diff --git a/src/Microsoft.OpenApi/Models/OpenApiConstants.cs b/src/Microsoft.OpenApi/Models/OpenApiConstants.cs index f3b925eeb..235240e33 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiConstants.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiConstants.cs @@ -19,6 +19,11 @@ public static class OpenApiConstants /// Field: Info /// public const string Info = "info"; + + /// + /// Field: JsonSchemaDialect + /// + public const string JsonSchemaDialect = "jsonSchemaDialect"; /// /// Field: Webhooks diff --git a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs index 2e94f6e8a..dbd84f157 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs @@ -29,6 +29,11 @@ public class OpenApiDocument : IOpenApiSerializable, IOpenApiExtensible /// public OpenApiInfo Info { get; set; } + /// + /// The default value for the $schema keyword within Schema Objects contained within this OAS document. This MUST be in the form of a URI. + /// + public string JsonSchemaDialect { get; set; } + /// /// An array of Server Objects, which provide connectivity information to a target server. /// @@ -89,6 +94,7 @@ public OpenApiDocument(OpenApiDocument document) { Workspace = document?.Workspace != null ? new(document?.Workspace) : null; Info = document?.Info != null ? new(document?.Info) : null; + JsonSchemaDialect = document?.JsonSchemaDialect ?? JsonSchemaDialect; Servers = document?.Servers != null ? new List(document.Servers) : null; Paths = document?.Paths != null ? new(document?.Paths) : null; Webhooks = document?.Webhooks != null ? new Dictionary(document.Webhooks) : null; @@ -102,7 +108,7 @@ public OpenApiDocument(OpenApiDocument document) /// /// Serialize to the latest patch of OpenAPI object V3.0. /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { if (writer == null) { @@ -112,11 +118,26 @@ public void SerializeAsV3(IOpenApiWriter writer) writer.WriteStartObject(); // openapi - writer.WriteProperty(OpenApiConstants.OpenApi, "3.0.1"); - + switch (version) + { + case OpenApiSpecVersion.OpenApi3_1: + writer.WriteProperty(OpenApiConstants.OpenApi, "3.1.0"); + break; + case OpenApiSpecVersion.OpenApi3_0: + writer.WriteProperty(OpenApiConstants.OpenApi, "3.0.1"); + break; + default: + writer.WriteProperty(OpenApiConstants.OpenApi, "3.0.1"); + break; + } + // info writer.WriteRequiredObject(OpenApiConstants.Info, Info, (w, i) => i.SerializeAsV3(w)); + // jsonSchemaDialect + if(version == OpenApiSpecVersion.OpenApi3_1) + writer.WriteProperty(OpenApiConstants.JsonSchemaDialect, JsonSchemaDialect); + // servers writer.WriteOptionalCollection(OpenApiConstants.Servers, Servers, (w, s) => s.SerializeAsV3(w)); @@ -124,7 +145,9 @@ public void SerializeAsV3(IOpenApiWriter writer) writer.WriteRequiredObject(OpenApiConstants.Paths, Paths, (w, p) => p.SerializeAsV3(w)); // webhooks - writer.WriteOptionalMap( + if (version == OpenApiSpecVersion.OpenApi3_1) + { + writer.WriteOptionalMap( OpenApiConstants.Webhooks, Webhooks, (w, key, component) => @@ -140,6 +163,7 @@ public void SerializeAsV3(IOpenApiWriter writer) component.SerializeAsV3(w); } }); + } // components writer.WriteOptionalObject(OpenApiConstants.Components, Components, (w, c) => c.SerializeAsV3(w)); @@ -157,7 +181,7 @@ public void SerializeAsV3(IOpenApiWriter writer) writer.WriteOptionalObject(OpenApiConstants.ExternalDocs, ExternalDocs, (w, e) => e.SerializeAsV3(w)); // extensions - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); writer.WriteEndObject(); } From c0f218a92a79a44b56d118f62181f9e4607fa3a8 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 23 Jan 2023 15:58:17 +0300 Subject: [PATCH 02/20] Add test for validation; refactor existing tests by updating spec version for serialiazing/deserializing properties only available in v3.1 --- .../V3Tests/OpenApiDocumentTests.cs | 5 +-- .../Models/OpenApiComponentsTests.cs | 4 +-- ...orks_produceTerseOutput=False.verified.txt | 2 +- .../Models/OpenApiDocumentTests.cs | 34 +++++++++++++++++-- .../Models/OpenApiInfoTests.cs | 4 +-- .../Models/OpenApiLicenseTests.cs | 4 +-- 6 files changed, 41 insertions(+), 12 deletions(-) diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs index 15b08166e..dd2235631 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs @@ -1559,7 +1559,7 @@ public void ParseDocumentWithWebhooksShouldSucceed() }; // Assert - diagnostic.Should().BeEquivalentTo(new OpenApiDiagnostic() { SpecificationVersion = OpenApiSpecVersion.OpenApi3_0 }); + diagnostic.Should().BeEquivalentTo(new OpenApiDiagnostic() { SpecificationVersion = OpenApiSpecVersion.OpenApi3_1 }); actual.Should().BeEquivalentTo(expected); } @@ -1769,6 +1769,7 @@ public void ParseDocumentsWithReusablePathItemInWebhooksSucceeds() Title = "Webhook Example", Version = "1.0.0" }, + JsonSchemaDialect = "http://json-schema.org/draft-07/schema#", Webhooks = components.PathItems, Components = components }; @@ -1776,7 +1777,7 @@ public void ParseDocumentsWithReusablePathItemInWebhooksSucceeds() // Assert actual.Should().BeEquivalentTo(expected); context.Should().BeEquivalentTo( - new OpenApiDiagnostic() { SpecificationVersion = OpenApiSpecVersion.OpenApi3_0 }); + new OpenApiDiagnostic() { SpecificationVersion = OpenApiSpecVersion.OpenApi3_1}); } diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiComponentsTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiComponentsTests.cs index d557f4c4c..86e856d5d 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiComponentsTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiComponentsTests.cs @@ -711,7 +711,7 @@ public void SerializeComponentsWithPathItemsAsJsonWorks() } }"; // Act - var actual = ComponentsWithPathItem.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = ComponentsWithPathItem.SerializeAsJson(OpenApiSpecVersion.OpenApi3_1); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -748,7 +748,7 @@ public void SerializeComponentsWithPathItemsAsYamlWorks() description: Return a 200 status to indicate that the data was received successfully"; // Act - var actual = ComponentsWithPathItem.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = ComponentsWithPathItem.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_1); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.SerializeDocumentWithWebhooksAsV3JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.SerializeDocumentWithWebhooksAsV3JsonWorks_produceTerseOutput=False.verified.txt index 73cc1b716..f7424fa62 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.SerializeDocumentWithWebhooksAsV3JsonWorks_produceTerseOutput=False.verified.txt +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.SerializeDocumentWithWebhooksAsV3JsonWorks_produceTerseOutput=False.verified.txt @@ -1,5 +1,5 @@ { - "openapi": "3.0.1", + "openapi": "3.1.0", "info": { "title": "Webhook Example", "version": "1.0.0" diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs index 6a185b556..b0cc726c8 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs @@ -1439,7 +1439,7 @@ public async void SerializeDocumentWithWebhooksAsV3JsonWorks(bool produceTerseOu var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - DocumentWithWebhooks.SerializeAsV3(writer); + DocumentWithWebhooks.SerializeAsV3(writer, OpenApiSpecVersion.OpenApi3_1); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); @@ -1451,7 +1451,7 @@ public async void SerializeDocumentWithWebhooksAsV3JsonWorks(bool produceTerseOu public void SerializeDocumentWithWebhooksAsV3YamlWorks() { // Arrange - var expected = @"openapi: 3.0.1 + var expected = @"openapi: '3.1.0' info: title: Webhook Example version: 1.0.0 @@ -1484,12 +1484,40 @@ public void SerializeDocumentWithWebhooksAsV3YamlWorks() type: string"; // Act - var actual = DocumentWithWebhooks.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = DocumentWithWebhooks.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_1); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); expected = expected.MakeLineBreaksEnvironmentNeutral(); Assert.Equal(expected, actual); } + + [Fact] + public void SerializeDocumentWithRootJsonSchemaDialectPropertyWorks() + { + // Arrange + var doc = new OpenApiDocument + { + Info = new OpenApiInfo + { + Title = "JsonSchemaDialectTest", + Version = "1.0.0" + }, + JsonSchemaDialect = "http://json-schema.org/draft-07/schema#" + }; + + var expected = @"openapi: '3.1.0' +info: + title: JsonSchemaDialectTest + version: 1.0.0 +jsonSchemaDialect: http://json-schema.org/draft-07/schema# +paths: { }"; + + // Act + var actual = doc.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_1); + + // Assert + Assert.Equal(expected.MakeLineBreaksEnvironmentNeutral(), actual.MakeLineBreaksEnvironmentNeutral()); + } } } diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiInfoTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiInfoTests.cs index e9acbd486..42ed5ae1f 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiInfoTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiInfoTests.cs @@ -215,7 +215,7 @@ public void SerializeInfoObjectWithSummaryAsV3YamlWorks() version: '1.1.1'"; // Act - var actual = InfoWithSummary.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = InfoWithSummary.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_1); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -235,7 +235,7 @@ public void SerializeInfoObjectWithSummaryAsV3JsonWorks() }"; // Act - var actual = InfoWithSummary.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = InfoWithSummary.SerializeAsJson(OpenApiSpecVersion.OpenApi3_1); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiLicenseTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiLicenseTests.cs index 3f5ef03b6..2d81ac3c5 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiLicenseTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiLicenseTests.cs @@ -141,7 +141,7 @@ public void SerializeLicenseWithIdentifierAsJsonWorks() }"; // Act - var actual = LicenseWithIdentifier.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = LicenseWithIdentifier.SerializeAsJson(OpenApiSpecVersion.OpenApi3_1); // Assert Assert.Equal(expected.MakeLineBreaksEnvironmentNeutral(), actual.MakeLineBreaksEnvironmentNeutral()); @@ -155,7 +155,7 @@ public void SerializeLicenseWithIdentifierAsYamlWorks() identifier: Apache-2.0"; // Act - var actual = LicenseWithIdentifier.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); + var actual = LicenseWithIdentifier.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_1); // Assert Assert.Equal(expected.MakeLineBreaksEnvironmentNeutral(), actual.MakeLineBreaksEnvironmentNeutral()); From 312abb088e45e60ab099a14d2f4594296ffa39ed Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 23 Jan 2023 16:03:17 +0300 Subject: [PATCH 03/20] Add an optional spec version parameter to serialize method to write out version-specific properties --- .../Extensions/OpenApiSerializableExtensions.cs | 4 ++++ .../Interfaces/IOpenApiSerializable.cs | 3 ++- src/Microsoft.OpenApi/Models/OpenApiCallback.cs | 2 +- src/Microsoft.OpenApi/Models/OpenApiComponents.cs | 13 ++++++++----- src/Microsoft.OpenApi/Models/OpenApiContact.cs | 6 +++--- .../Models/OpenApiDiscriminator.cs | 2 +- src/Microsoft.OpenApi/Models/OpenApiEncoding.cs | 4 ++-- src/Microsoft.OpenApi/Models/OpenApiExample.cs | 2 +- .../Models/OpenApiExtensibleDictionary.cs | 4 ++-- src/Microsoft.OpenApi/Models/OpenApiExternalDocs.cs | 6 +++--- src/Microsoft.OpenApi/Models/OpenApiHeader.cs | 2 +- src/Microsoft.OpenApi/Models/OpenApiInfo.cs | 11 +++++++---- src/Microsoft.OpenApi/Models/OpenApiLicense.cs | 11 +++++++---- src/Microsoft.OpenApi/Models/OpenApiLink.cs | 2 +- src/Microsoft.OpenApi/Models/OpenApiMediaType.cs | 4 ++-- src/Microsoft.OpenApi/Models/OpenApiOAuthFlow.cs | 4 ++-- src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs | 4 ++-- src/Microsoft.OpenApi/Models/OpenApiOperation.cs | 6 +++--- src/Microsoft.OpenApi/Models/OpenApiParameter.cs | 2 +- src/Microsoft.OpenApi/Models/OpenApiPathItem.cs | 2 +- src/Microsoft.OpenApi/Models/OpenApiReference.cs | 12 ++++++------ src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs | 2 +- src/Microsoft.OpenApi/Models/OpenApiResponse.cs | 2 +- src/Microsoft.OpenApi/Models/OpenApiSchema.cs | 2 +- .../Models/OpenApiSecurityRequirement.cs | 2 +- .../Models/OpenApiSecurityScheme.cs | 2 +- src/Microsoft.OpenApi/Models/OpenApiServer.cs | 4 ++-- .../Models/OpenApiServerVariable.cs | 4 ++-- src/Microsoft.OpenApi/Models/OpenApiTag.cs | 2 +- src/Microsoft.OpenApi/Models/OpenApiXml.cs | 4 ++-- src/Microsoft.OpenApi/OpenApiSpecVersion.cs | 8 +++++++- 31 files changed, 79 insertions(+), 59 deletions(-) diff --git a/src/Microsoft.OpenApi/Extensions/OpenApiSerializableExtensions.cs b/src/Microsoft.OpenApi/Extensions/OpenApiSerializableExtensions.cs index f60c5483b..de68d381f 100755 --- a/src/Microsoft.OpenApi/Extensions/OpenApiSerializableExtensions.cs +++ b/src/Microsoft.OpenApi/Extensions/OpenApiSerializableExtensions.cs @@ -117,6 +117,10 @@ public static void Serialize(this T element, IOpenApiWriter writer, OpenApiSp switch (specVersion) { + case OpenApiSpecVersion.OpenApi3_1: + element.SerializeAsV3(writer, OpenApiSpecVersion.OpenApi3_1); + break; + case OpenApiSpecVersion.OpenApi3_0: element.SerializeAsV3(writer); break; diff --git a/src/Microsoft.OpenApi/Interfaces/IOpenApiSerializable.cs b/src/Microsoft.OpenApi/Interfaces/IOpenApiSerializable.cs index 582bd49cd..cea0f6e29 100644 --- a/src/Microsoft.OpenApi/Interfaces/IOpenApiSerializable.cs +++ b/src/Microsoft.OpenApi/Interfaces/IOpenApiSerializable.cs @@ -14,7 +14,8 @@ public interface IOpenApiSerializable : IOpenApiElement /// Serialize Open API element to v3.0. /// /// The writer. - void SerializeAsV3(IOpenApiWriter writer); + /// The OpenApi specification version. + void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion specVersion = OpenApiSpecVersion.OpenApi3_0); /// /// Serialize Open API element to v2.0. diff --git a/src/Microsoft.OpenApi/Models/OpenApiCallback.cs b/src/Microsoft.OpenApi/Models/OpenApiCallback.cs index 2dcae12d1..91bb46862 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiCallback.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiCallback.cs @@ -79,7 +79,7 @@ public void AddPathItem(RuntimeExpression expression, OpenApiPathItem pathItem) /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { if (writer == null) { diff --git a/src/Microsoft.OpenApi/Models/OpenApiComponents.cs b/src/Microsoft.OpenApi/Models/OpenApiComponents.cs index 87c7fdea7..6ef94900a 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiComponents.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiComponents.cs @@ -97,7 +97,7 @@ public OpenApiComponents(OpenApiComponents components) /// /// Serialize to Open Api v3.0. /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { if (writer == null) { @@ -293,8 +293,10 @@ public void SerializeAsV3(IOpenApiWriter writer) } }); - // pathItems - writer.WriteOptionalMap( + // pathItems - only present in v3.1 + if(version == OpenApiSpecVersion.OpenApi3_1) + { + writer.WriteOptionalMap( OpenApiConstants.PathItems, PathItems, (w, key, component) => @@ -310,9 +312,10 @@ public void SerializeAsV3(IOpenApiWriter writer) component.SerializeAsV3(w); } }); - + } + // extensions - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiContact.cs b/src/Microsoft.OpenApi/Models/OpenApiContact.cs index 352697bf2..06b2b9e37 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiContact.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiContact.cs @@ -54,11 +54,11 @@ public OpenApiContact(OpenApiContact contact) /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { - WriteInternal(writer, OpenApiSpecVersion.OpenApi3_0); + WriteInternal(writer, version); } - + /// /// Serialize to Open Api v2.0 /// diff --git a/src/Microsoft.OpenApi/Models/OpenApiDiscriminator.cs b/src/Microsoft.OpenApi/Models/OpenApiDiscriminator.cs index 9ae7f0e6a..17f484067 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiDiscriminator.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiDiscriminator.cs @@ -39,7 +39,7 @@ public OpenApiDiscriminator(OpenApiDiscriminator discriminator) /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { if (writer == null) { diff --git a/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs b/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs index ddb4162bc..7010f8f2c 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs @@ -74,7 +74,7 @@ public OpenApiEncoding(OpenApiEncoding encoding) /// /// Serialize to Open Api v3.0. /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { if (writer == null) { @@ -99,7 +99,7 @@ public void SerializeAsV3(IOpenApiWriter writer) writer.WriteProperty(OpenApiConstants.AllowReserved, AllowReserved, false); // extensions - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiExample.cs b/src/Microsoft.OpenApi/Models/OpenApiExample.cs index 4d091a361..e8aee68f3 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiExample.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiExample.cs @@ -76,7 +76,7 @@ public OpenApiExample(OpenApiExample example) /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { if (writer == null) { diff --git a/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs b/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs index 40c26d429..62dfe2340 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs @@ -41,7 +41,7 @@ protected OpenApiExtensibleDictionary( /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { if (writer == null) { @@ -55,7 +55,7 @@ public void SerializeAsV3(IOpenApiWriter writer) writer.WriteRequiredObject(item.Key, item.Value, (w, p) => p.SerializeAsV3(w)); } - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiExternalDocs.cs b/src/Microsoft.OpenApi/Models/OpenApiExternalDocs.cs index 9ad3b9e55..f7deb148c 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiExternalDocs.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiExternalDocs.cs @@ -47,11 +47,11 @@ public OpenApiExternalDocs(OpenApiExternalDocs externalDocs) /// /// Serialize to Open Api v3.0. /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { - WriteInternal(writer, OpenApiSpecVersion.OpenApi3_0); + WriteInternal(writer, version); } - + /// /// Serialize to Open Api v2.0. /// diff --git a/src/Microsoft.OpenApi/Models/OpenApiHeader.cs b/src/Microsoft.OpenApi/Models/OpenApiHeader.cs index fb4411478..790fe4dce 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiHeader.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiHeader.cs @@ -115,7 +115,7 @@ public OpenApiHeader(OpenApiHeader header) /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { if (writer == null) { diff --git a/src/Microsoft.OpenApi/Models/OpenApiInfo.cs b/src/Microsoft.OpenApi/Models/OpenApiInfo.cs index 910d097e3..7fa070f00 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiInfo.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiInfo.cs @@ -76,7 +76,7 @@ public OpenApiInfo(OpenApiInfo info) /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { if (writer == null) { @@ -88,9 +88,12 @@ public void SerializeAsV3(IOpenApiWriter writer) // title writer.WriteProperty(OpenApiConstants.Title, Title); - // summary - writer.WriteProperty(OpenApiConstants.Summary, Summary); - + // summary - present in 3.1 + if (version == OpenApiSpecVersion.OpenApi3_1) + { + writer.WriteProperty(OpenApiConstants.Summary, Summary); + } + // description writer.WriteProperty(OpenApiConstants.Description, Description); diff --git a/src/Microsoft.OpenApi/Models/OpenApiLicense.cs b/src/Microsoft.OpenApi/Models/OpenApiLicense.cs index f812b5b65..37a792de9 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiLicense.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiLicense.cs @@ -53,9 +53,9 @@ public OpenApiLicense(OpenApiLicense license) /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { - WriteInternal(writer, OpenApiSpecVersion.OpenApi3_0); + WriteInternal(writer, version); } /// @@ -78,8 +78,11 @@ private void WriteInternal(IOpenApiWriter writer, OpenApiSpecVersion specVersion // name writer.WriteProperty(OpenApiConstants.Name, Name); - // identifier - writer.WriteProperty(OpenApiConstants.Identifier, Identifier); + // identifier - present in v3.1 + if (specVersion == OpenApiSpecVersion.OpenApi3_1) + { + writer.WriteProperty(OpenApiConstants.Identifier, Identifier); + } // url writer.WriteProperty(OpenApiConstants.Url, Url?.OriginalString); diff --git a/src/Microsoft.OpenApi/Models/OpenApiLink.cs b/src/Microsoft.OpenApi/Models/OpenApiLink.cs index b682744e9..7e0c7093a 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiLink.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiLink.cs @@ -85,7 +85,7 @@ public OpenApiLink(OpenApiLink link) /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { if (writer == null) { diff --git a/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs b/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs index 63a58cd02..4b195d82d 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs @@ -63,7 +63,7 @@ public OpenApiMediaType(OpenApiMediaType mediaType) /// /// Serialize to Open Api v3.0. /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { if (writer == null) { @@ -85,7 +85,7 @@ public void SerializeAsV3(IOpenApiWriter writer) writer.WriteOptionalMap(OpenApiConstants.Encoding, Encoding, (w, e) => e.SerializeAsV3(w)); // extensions - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlow.cs b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlow.cs index c6f91fbd8..eb8855214 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlow.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlow.cs @@ -61,7 +61,7 @@ public OpenApiOAuthFlow(OpenApiOAuthFlow oAuthFlow) /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { if (writer == null) { @@ -83,7 +83,7 @@ public void SerializeAsV3(IOpenApiWriter writer) writer.WriteRequiredMap(OpenApiConstants.Scopes, Scopes, (w, s) => w.WriteValue(s)); // extensions - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs index 8443e6730..bcde2c85f 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs @@ -59,7 +59,7 @@ public OpenApiOAuthFlows(OpenApiOAuthFlows oAuthFlows) /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { if (writer == null) { @@ -87,7 +87,7 @@ public void SerializeAsV3(IOpenApiWriter writer) (w, o) => o.SerializeAsV3(w)); // extensions - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs index d047b9cb6..031be3be4 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs @@ -134,7 +134,7 @@ public OpenApiOperation(OpenApiOperation operation) /// /// Serialize to Open Api v3.0. /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { if (writer == null) { @@ -186,8 +186,8 @@ public void SerializeAsV3(IOpenApiWriter writer) writer.WriteOptionalCollection(OpenApiConstants.Servers, Servers, (w, s) => s.SerializeAsV3(w)); // specification extensions - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); - + writer.WriteExtensions(Extensions, version); + writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs index e0e472721..1b0c6dc53 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs @@ -172,7 +172,7 @@ public OpenApiParameter(OpenApiParameter parameter) /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { if (writer == null) { diff --git a/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs b/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs index ddd358dc2..df5e5e060 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs @@ -88,7 +88,7 @@ public OpenApiPathItem(OpenApiPathItem pathItem) /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { if (writer == null) { diff --git a/src/Microsoft.OpenApi/Models/OpenApiReference.cs b/src/Microsoft.OpenApi/Models/OpenApiReference.cs index a558e4394..f070e01b3 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiReference.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiReference.cs @@ -146,7 +146,7 @@ public OpenApiReference(OpenApiReference reference) /// /// Serialize to Open Api v3.0. /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { if (writer == null) { @@ -169,11 +169,11 @@ public void SerializeAsV3(IOpenApiWriter writer) writer.WriteStartObject(); - // summary - writer.WriteProperty(OpenApiConstants.Summary, Summary); - - // description - writer.WriteProperty(OpenApiConstants.Description, Description); + if (version == OpenApiSpecVersion.OpenApi3_1) + { + writer.WriteProperty(OpenApiConstants.Summary, Summary); + writer.WriteProperty(OpenApiConstants.Description, Description); + } // $ref writer.WriteProperty(OpenApiConstants.DollarRef, ReferenceV3); diff --git a/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs b/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs index 70f1f742a..f53636bb8 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs @@ -68,7 +68,7 @@ public OpenApiRequestBody(OpenApiRequestBody requestBody) /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { if (writer == null) { diff --git a/src/Microsoft.OpenApi/Models/OpenApiResponse.cs b/src/Microsoft.OpenApi/Models/OpenApiResponse.cs index a173f6c1a..47f906ed0 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiResponse.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiResponse.cs @@ -73,7 +73,7 @@ public OpenApiResponse(OpenApiResponse response) /// /// Serialize to Open Api v3.0. /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { if (writer == null) { diff --git a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs index 6019d7362..ec456ed6e 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs @@ -295,7 +295,7 @@ public OpenApiSchema(OpenApiSchema schema) /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { if (writer == null) { diff --git a/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs b/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs index d2564daf2..a7eaab07d 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs @@ -31,7 +31,7 @@ public OpenApiSecurityRequirement() /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { if (writer == null) { diff --git a/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs b/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs index 913e70441..51ae87d1f 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs @@ -100,7 +100,7 @@ public OpenApiSecurityScheme(OpenApiSecurityScheme securityScheme) /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { if (writer == null) { diff --git a/src/Microsoft.OpenApi/Models/OpenApiServer.cs b/src/Microsoft.OpenApi/Models/OpenApiServer.cs index b3b1d1287..ef089725a 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiServer.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiServer.cs @@ -55,7 +55,7 @@ public OpenApiServer(OpenApiServer server) /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { if (writer == null) { @@ -74,7 +74,7 @@ public void SerializeAsV3(IOpenApiWriter writer) writer.WriteOptionalMap(OpenApiConstants.Variables, Variables, (w, v) => v.SerializeAsV3(w)); // specification extensions - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiServerVariable.cs b/src/Microsoft.OpenApi/Models/OpenApiServerVariable.cs index 70164bc59..bfa4cd840 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiServerVariable.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiServerVariable.cs @@ -53,7 +53,7 @@ public OpenApiServerVariable(OpenApiServerVariable serverVariable) /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { if (writer == null) { @@ -72,7 +72,7 @@ public void SerializeAsV3(IOpenApiWriter writer) writer.WriteOptionalCollection(OpenApiConstants.Enum, Enum, (w, s) => w.WriteValue(s)); // specification extensions - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiTag.cs b/src/Microsoft.OpenApi/Models/OpenApiTag.cs index ba4129142..503699cfa 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiTag.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiTag.cs @@ -64,7 +64,7 @@ public OpenApiTag(OpenApiTag tag) /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { if (writer == null) { diff --git a/src/Microsoft.OpenApi/Models/OpenApiXml.cs b/src/Microsoft.OpenApi/Models/OpenApiXml.cs index c6719d85e..b8c71118f 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiXml.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiXml.cs @@ -67,9 +67,9 @@ public OpenApiXml(OpenApiXml xml) /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer) + public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) { - Write(writer, OpenApiSpecVersion.OpenApi3_0); + Write(writer, version); } /// diff --git a/src/Microsoft.OpenApi/OpenApiSpecVersion.cs b/src/Microsoft.OpenApi/OpenApiSpecVersion.cs index 20e49af80..6c2a91716 100644 --- a/src/Microsoft.OpenApi/OpenApiSpecVersion.cs +++ b/src/Microsoft.OpenApi/OpenApiSpecVersion.cs @@ -16,6 +16,12 @@ public enum OpenApiSpecVersion /// /// Represents all patches of OpenAPI V3.0 spec (e.g. 3.0.0, 3.0.1) /// - OpenApi3_0 + OpenApi3_0, + + /// + /// Represents OpenAPI V3.1 spec + /// + OpenApi3_1 + } } From 3fff889b786ae3544d75157cf2db26c4770ca644 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 23 Jan 2023 16:06:01 +0300 Subject: [PATCH 04/20] Update the spec version in the diagnostic object to be more explicit --- src/Microsoft.OpenApi.Readers/ParsingContext.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Readers/ParsingContext.cs b/src/Microsoft.OpenApi.Readers/ParsingContext.cs index 905bfff98..c6c14d215 100644 --- a/src/Microsoft.OpenApi.Readers/ParsingContext.cs +++ b/src/Microsoft.OpenApi.Readers/ParsingContext.cs @@ -69,7 +69,7 @@ internal OpenApiDocument Parse(YamlDocument yamlDocument) case string version when version.is3_0() || version.is3_1(): VersionService = new OpenApiV3VersionService(Diagnostic); doc = VersionService.LoadDocument(RootNode); - this.Diagnostic.SpecificationVersion = OpenApiSpecVersion.OpenApi3_0; + this.Diagnostic.SpecificationVersion = version.is3_1() ? OpenApiSpecVersion.OpenApi3_1 : OpenApiSpecVersion.OpenApi3_0; ValidateRequiredFields(doc, version); break; From e62c71fe9a649841f5e8cf57df1f7244cb5aaebd Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 23 Jan 2023 16:06:19 +0300 Subject: [PATCH 05/20] Update verifier text result --- ...thWebhooksAsV3JsonWorks_produceTerseOutput=True.verified.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.SerializeDocumentWithWebhooksAsV3JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.SerializeDocumentWithWebhooksAsV3JsonWorks_produceTerseOutput=True.verified.txt index a23dd5675..ca0abf4e2 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.SerializeDocumentWithWebhooksAsV3JsonWorks_produceTerseOutput=True.verified.txt +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.SerializeDocumentWithWebhooksAsV3JsonWorks_produceTerseOutput=True.verified.txt @@ -1 +1 @@ -{"openapi":"3.0.1","info":{"title":"Webhook Example","version":"1.0.0"},"paths":{},"webhooks":{"newPet":{"post":{"requestBody":{"description":"Information about a new pet in the system","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Pet"}}}},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}}}}},"components":{"schemas":{"Pet":{"required":["id","name"],"properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"tag":{"type":"string"}}}}}} \ No newline at end of file +{"openapi":"3.1.0","info":{"title":"Webhook Example","version":"1.0.0"},"paths":{},"webhooks":{"newPet":{"post":{"requestBody":{"description":"Information about a new pet in the system","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Pet"}}}},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}}}}},"components":{"schemas":{"Pet":{"required":["id","name"],"properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"tag":{"type":"string"}}}}}} \ No newline at end of file From 00e19eb417567452024d02a27c89a0c123973781 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 23 Jan 2023 16:06:31 +0300 Subject: [PATCH 06/20] Update public API surface --- .../PublicApi/PublicApi.approved.txt | 63 ++++++++++--------- 1 file changed, 33 insertions(+), 30 deletions(-) diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt index b42325207..85e995ee1 100755 --- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt +++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt @@ -313,7 +313,7 @@ namespace Microsoft.OpenApi.Interfaces public interface IOpenApiSerializable : Microsoft.OpenApi.Interfaces.IOpenApiElement { void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer); - void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer); + void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion specVersion = 1); } } namespace Microsoft.OpenApi @@ -334,6 +334,7 @@ namespace Microsoft.OpenApi { OpenApi2_0 = 0, OpenApi3_0 = 1, + OpenApi3_1 = 2, } } namespace Microsoft.OpenApi.Models @@ -350,7 +351,7 @@ namespace Microsoft.OpenApi.Models public Microsoft.OpenApi.Models.OpenApiCallback GetEffective(Microsoft.OpenApi.Models.OpenApiDocument doc) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiComponents : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable @@ -369,7 +370,7 @@ namespace Microsoft.OpenApi.Models public System.Collections.Generic.IDictionary Schemas { get; set; } public System.Collections.Generic.IDictionary SecuritySchemes { get; set; } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } } public static class OpenApiConstants { @@ -429,6 +430,7 @@ namespace Microsoft.OpenApi.Models public const string In = "in"; public const string Info = "info"; public const string Items = "items"; + public const string JsonSchemaDialect = "jsonSchemaDialect"; public const string Jwt = "JWT"; public const string License = "license"; public const string Links = "links"; @@ -511,7 +513,7 @@ namespace Microsoft.OpenApi.Models public string Name { get; set; } public System.Uri Url { get; set; } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } } public class OpenApiDiscriminator : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -520,7 +522,7 @@ namespace Microsoft.OpenApi.Models public System.Collections.Generic.IDictionary Mapping { get; set; } public string PropertyName { get; set; } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } } public class OpenApiDocument : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -531,6 +533,7 @@ namespace Microsoft.OpenApi.Models public Microsoft.OpenApi.Models.OpenApiExternalDocs ExternalDocs { get; set; } public string HashCode { get; } public Microsoft.OpenApi.Models.OpenApiInfo Info { get; set; } + public string JsonSchemaDialect { get; set; } public Microsoft.OpenApi.Models.OpenApiPaths Paths { get; set; } public System.Collections.Generic.IList SecurityRequirements { get; set; } public System.Collections.Generic.IList Servers { get; set; } @@ -540,7 +543,7 @@ namespace Microsoft.OpenApi.Models public Microsoft.OpenApi.Interfaces.IOpenApiReferenceable ResolveReference(Microsoft.OpenApi.Models.OpenApiReference reference) { } public System.Collections.Generic.IEnumerable ResolveReferences() { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } public static string GenerateHashValue(Microsoft.OpenApi.Models.OpenApiDocument doc) { } } public class OpenApiEncoding : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable @@ -554,7 +557,7 @@ namespace Microsoft.OpenApi.Models public System.Collections.Generic.IDictionary Headers { get; set; } public Microsoft.OpenApi.Models.ParameterStyle? Style { get; set; } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } } public class OpenApiError { @@ -579,7 +582,7 @@ namespace Microsoft.OpenApi.Models public Microsoft.OpenApi.Models.OpenApiExample GetEffective(Microsoft.OpenApi.Models.OpenApiDocument doc) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public abstract class OpenApiExtensibleDictionary : System.Collections.Generic.Dictionary, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable @@ -589,7 +592,7 @@ namespace Microsoft.OpenApi.Models protected OpenApiExtensibleDictionary(System.Collections.Generic.Dictionary dictionary = null, System.Collections.Generic.IDictionary extensions = null) { } public System.Collections.Generic.IDictionary Extensions { get; set; } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } } public class OpenApiExternalDocs : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -599,7 +602,7 @@ namespace Microsoft.OpenApi.Models public System.Collections.Generic.IDictionary Extensions { get; set; } public System.Uri Url { get; set; } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } } public class OpenApiHeader : Microsoft.OpenApi.Interfaces.IEffective, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -622,7 +625,7 @@ namespace Microsoft.OpenApi.Models public Microsoft.OpenApi.Models.OpenApiHeader GetEffective(Microsoft.OpenApi.Models.OpenApiDocument doc) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiInfo : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable @@ -638,7 +641,7 @@ namespace Microsoft.OpenApi.Models public string Title { get; set; } public string Version { get; set; } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } } public class OpenApiLicense : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -649,7 +652,7 @@ namespace Microsoft.OpenApi.Models public string Name { get; set; } public System.Uri Url { get; set; } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } } public class OpenApiLink : Microsoft.OpenApi.Interfaces.IEffective, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -667,7 +670,7 @@ namespace Microsoft.OpenApi.Models public Microsoft.OpenApi.Models.OpenApiLink GetEffective(Microsoft.OpenApi.Models.OpenApiDocument doc) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiMediaType : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable @@ -680,7 +683,7 @@ namespace Microsoft.OpenApi.Models public System.Collections.Generic.IDictionary Extensions { get; set; } public Microsoft.OpenApi.Models.OpenApiSchema Schema { get; set; } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } } public class OpenApiOAuthFlow : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -692,7 +695,7 @@ namespace Microsoft.OpenApi.Models public System.Collections.Generic.IDictionary Scopes { get; set; } public System.Uri TokenUrl { get; set; } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } } public class OpenApiOAuthFlows : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -704,7 +707,7 @@ namespace Microsoft.OpenApi.Models public Microsoft.OpenApi.Models.OpenApiOAuthFlow Implicit { get; set; } public Microsoft.OpenApi.Models.OpenApiOAuthFlow Password { get; set; } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } } public class OpenApiOperation : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -725,7 +728,7 @@ namespace Microsoft.OpenApi.Models public string Summary { get; set; } public System.Collections.Generic.IList Tags { get; set; } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } } public class OpenApiParameter : Microsoft.OpenApi.Interfaces.IEffective, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -751,7 +754,7 @@ namespace Microsoft.OpenApi.Models public Microsoft.OpenApi.Models.OpenApiParameter GetEffective(Microsoft.OpenApi.Models.OpenApiDocument doc) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiPathItem : Microsoft.OpenApi.Interfaces.IEffective, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable @@ -770,7 +773,7 @@ namespace Microsoft.OpenApi.Models public Microsoft.OpenApi.Models.OpenApiPathItem GetEffective(Microsoft.OpenApi.Models.OpenApiDocument doc) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiPaths : Microsoft.OpenApi.Models.OpenApiExtensibleDictionary @@ -793,7 +796,7 @@ namespace Microsoft.OpenApi.Models public string Summary { get; set; } public Microsoft.OpenApi.Models.ReferenceType? Type { get; set; } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } } public class OpenApiRequestBody : Microsoft.OpenApi.Interfaces.IEffective, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -808,7 +811,7 @@ namespace Microsoft.OpenApi.Models public Microsoft.OpenApi.Models.OpenApiRequestBody GetEffective(Microsoft.OpenApi.Models.OpenApiDocument doc) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiResponse : Microsoft.OpenApi.Interfaces.IEffective, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable @@ -825,7 +828,7 @@ namespace Microsoft.OpenApi.Models public Microsoft.OpenApi.Models.OpenApiResponse GetEffective(Microsoft.OpenApi.Models.OpenApiDocument doc) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiResponses : Microsoft.OpenApi.Models.OpenApiExtensibleDictionary @@ -879,14 +882,14 @@ namespace Microsoft.OpenApi.Models public Microsoft.OpenApi.Models.OpenApiSchema GetEffective(Microsoft.OpenApi.Models.OpenApiDocument doc) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiSecurityRequirement : System.Collections.Generic.Dictionary>, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { public OpenApiSecurityRequirement() { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } } public class OpenApiSecurityScheme : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -905,7 +908,7 @@ namespace Microsoft.OpenApi.Models public bool UnresolvedReference { get; set; } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiServer : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable @@ -917,7 +920,7 @@ namespace Microsoft.OpenApi.Models public string Url { get; set; } public System.Collections.Generic.IDictionary Variables { get; set; } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } } public class OpenApiServerVariable : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -928,7 +931,7 @@ namespace Microsoft.OpenApi.Models public System.Collections.Generic.List Enum { get; set; } public System.Collections.Generic.IDictionary Extensions { get; set; } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } } public class OpenApiTag : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -942,7 +945,7 @@ namespace Microsoft.OpenApi.Models public bool UnresolvedReference { get; set; } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiXml : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable @@ -956,7 +959,7 @@ namespace Microsoft.OpenApi.Models public string Prefix { get; set; } public bool Wrapped { get; set; } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } } public enum OperationType { From d57aad8dbd62d45d43aa59aec80797543fcbfd71 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 20 Feb 2023 14:23:19 +0300 Subject: [PATCH 07/20] Implement SerializeAs31 across model objects --- .../OpenApiSerializableExtensions.cs | 2 +- .../Interfaces/IOpenApiSerializable.cs | 9 +- .../Models/OpenApiCallback.cs | 28 +++-- .../Models/OpenApiComponents.cs | 74 +++++++------ .../Models/OpenApiContact.cs | 20 ++-- .../Models/OpenApiDiscriminator.cs | 27 +++-- .../Models/OpenApiDocument.cs | 100 ++++++++++-------- .../Models/OpenApiEncoding.cs | 29 +++-- .../Models/OpenApiExample.cs | 25 ++++- .../Models/OpenApiExtensibleDictionary.cs | 28 +++-- .../Models/OpenApiExternalDocs.cs | 19 ++-- src/Microsoft.OpenApi/Models/OpenApiHeader.cs | 25 +++-- src/Microsoft.OpenApi/Models/OpenApiInfo.cs | 40 ++++--- .../Models/OpenApiLicense.cs | 34 +++--- src/Microsoft.OpenApi/Models/OpenApiLink.cs | 24 +++-- .../Models/OpenApiMediaType.cs | 25 +++-- .../Models/OpenApiOAuthFlow.cs | 25 +++-- .../Models/OpenApiOAuthFlows.cs | 25 +++-- .../Models/OpenApiOperation.cs | 25 +++-- .../Models/OpenApiParameter.cs | 25 +++-- .../Models/OpenApiPathItem.cs | 25 +++-- .../Models/OpenApiReference.cs | 46 ++++---- .../Models/OpenApiRequestBody.cs | 23 +++- .../Models/OpenApiResponse.cs | 25 +++-- src/Microsoft.OpenApi/Models/OpenApiSchema.cs | 23 +++- .../Models/OpenApiSecurityRequirement.cs | 23 +++- .../Models/OpenApiSecurityScheme.cs | 26 +++-- src/Microsoft.OpenApi/Models/OpenApiServer.cs | 27 +++-- .../Models/OpenApiServerVariable.cs | 25 +++-- src/Microsoft.OpenApi/Models/OpenApiTag.cs | 27 +++-- src/Microsoft.OpenApi/Models/OpenApiXml.cs | 17 +-- 31 files changed, 620 insertions(+), 276 deletions(-) diff --git a/src/Microsoft.OpenApi/Extensions/OpenApiSerializableExtensions.cs b/src/Microsoft.OpenApi/Extensions/OpenApiSerializableExtensions.cs index de68d381f..6489c0fc0 100755 --- a/src/Microsoft.OpenApi/Extensions/OpenApiSerializableExtensions.cs +++ b/src/Microsoft.OpenApi/Extensions/OpenApiSerializableExtensions.cs @@ -118,7 +118,7 @@ public static void Serialize(this T element, IOpenApiWriter writer, OpenApiSp switch (specVersion) { case OpenApiSpecVersion.OpenApi3_1: - element.SerializeAsV3(writer, OpenApiSpecVersion.OpenApi3_1); + element.SerializeAsV31(writer); break; case OpenApiSpecVersion.OpenApi3_0: diff --git a/src/Microsoft.OpenApi/Interfaces/IOpenApiSerializable.cs b/src/Microsoft.OpenApi/Interfaces/IOpenApiSerializable.cs index cea0f6e29..8dbe514f5 100644 --- a/src/Microsoft.OpenApi/Interfaces/IOpenApiSerializable.cs +++ b/src/Microsoft.OpenApi/Interfaces/IOpenApiSerializable.cs @@ -10,12 +10,17 @@ namespace Microsoft.OpenApi.Interfaces /// public interface IOpenApiSerializable : IOpenApiElement { + /// + /// Serialize OpenAPI element into v3.1 + /// + /// + void SerializeAsV31(IOpenApiWriter writer); + /// /// Serialize Open API element to v3.0. /// /// The writer. - /// The OpenApi specification version. - void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion specVersion = OpenApiSpecVersion.OpenApi3_0); + void SerializeAsV3(IOpenApiWriter writer); /// /// Serialize Open API element to v2.0. diff --git a/src/Microsoft.OpenApi/Models/OpenApiCallback.cs b/src/Microsoft.OpenApi/Models/OpenApiCallback.cs index 91bb46862..601b53201 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiCallback.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiCallback.cs @@ -75,16 +75,32 @@ public void AddPathItem(RuntimeExpression expression, OpenApiPathItem pathItem) PathItems.Add(expression, pathItem); } - + + /// + /// Serialize to Open Api v3.1 + /// + /// + /// + public void SerializeAsV31(IOpenApiWriter writer) + { + Serialize(writer); + } + /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) + public void SerializeAsV3(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + Serialize(writer); + } + + /// + /// Serialize + /// + /// + public void Serialize(IOpenApiWriter writer) + { + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); var target = this; diff --git a/src/Microsoft.OpenApi/Models/OpenApiComponents.cs b/src/Microsoft.OpenApi/Models/OpenApiComponents.cs index 6ef94900a..9c276823d 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiComponents.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiComponents.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; using System.Collections.Generic; using System.Linq; using Microsoft.OpenApi.Interfaces; @@ -95,14 +96,50 @@ public OpenApiComponents(OpenApiComponents components) } /// - /// Serialize to Open Api v3.0. + /// Serialize to Open API v3.1. /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) - { - if (writer == null) + /// + public void SerializeAsV31(IOpenApiWriter writer) + { + Serialize(writer); + + // pathItems - only present in v3.1 + writer.WriteOptionalMap( + OpenApiConstants.PathItems, + PathItems, + (w, key, component) => { - throw Error.ArgumentNull(nameof(writer)); - } + if (component.Reference != null && + component.Reference.Type == ReferenceType.Schema && + component.Reference.Id == key) + { + component.SerializeAsV3WithoutReference(w); + } + else + { + component.SerializeAsV3(w); + } + }); + + writer.WriteEndObject(); + } + + /// + /// Serialize to v3.0 + /// + /// + public void SerializeAsV3(IOpenApiWriter writer) + { + Serialize(writer); + writer.WriteEndObject(); + } + + /// + /// Serialize . + /// + public void Serialize(IOpenApiWriter writer) + { + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); // If references have been inlined we don't need the to render the components section // however if they have cycles, then we will need a component rendered @@ -293,31 +330,8 @@ public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = Op } }); - // pathItems - only present in v3.1 - if(version == OpenApiSpecVersion.OpenApi3_1) - { - writer.WriteOptionalMap( - OpenApiConstants.PathItems, - PathItems, - (w, key, component) => - { - if (component.Reference != null && - component.Reference.Type == ReferenceType.Schema && - component.Reference.Id == key) - { - component.SerializeAsV3WithoutReference(w); - } - else - { - component.SerializeAsV3(w); - } - }); - } - // extensions - writer.WriteExtensions(Extensions, version); - - writer.WriteEndObject(); + writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); } /// diff --git a/src/Microsoft.OpenApi/Models/OpenApiContact.cs b/src/Microsoft.OpenApi/Models/OpenApiContact.cs index 06b2b9e37..5feb85b6c 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiContact.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiContact.cs @@ -52,13 +52,22 @@ public OpenApiContact(OpenApiContact contact) } /// - /// Serialize to Open Api v3.0 + /// Serialize to Open Api v3.1 /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) + /// + public void SerializeAsV31(IOpenApiWriter writer) { - WriteInternal(writer, version); + WriteInternal(writer, OpenApiSpecVersion.OpenApi3_1); } + /// + /// Serialize to Open Api v3.0 + /// + public void SerializeAsV3(IOpenApiWriter writer) + { + WriteInternal(writer, OpenApiSpecVersion.OpenApi3_0); + } + /// /// Serialize to Open Api v2.0 /// @@ -69,10 +78,7 @@ public void SerializeAsV2(IOpenApiWriter writer) private void WriteInternal(IOpenApiWriter writer, OpenApiSpecVersion specVersion) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); writer.WriteStartObject(); diff --git a/src/Microsoft.OpenApi/Models/OpenApiDiscriminator.cs b/src/Microsoft.OpenApi/Models/OpenApiDiscriminator.cs index 17f484067..de4b9eb49 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiDiscriminator.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiDiscriminator.cs @@ -36,15 +36,30 @@ public OpenApiDiscriminator(OpenApiDiscriminator discriminator) Mapping = discriminator?.Mapping != null ? new Dictionary(discriminator.Mapping) : null; } + /// + /// Serialize to Open Api v3.1 + /// + /// + public void SerializeAsV31(IOpenApiWriter writer) + { + Serialize(writer); + } + + /// + /// Serialize to Open Api v3.0 + /// + public void SerializeAsV3(IOpenApiWriter writer) + { + Serialize(writer); + } + /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) + /// + public void Serialize(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); writer.WriteStartObject(); @@ -53,8 +68,6 @@ public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = Op // mapping writer.WriteOptionalMap(OpenApiConstants.Mapping, Mapping, (w, s) => w.WriteValue(s)); - - writer.WriteEndObject(); } /// diff --git a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs index dbd84f157..6a290015a 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs @@ -106,65 +106,75 @@ public OpenApiDocument(OpenApiDocument document) } /// - /// Serialize to the latest patch of OpenAPI object V3.0. + /// Serialize to Open API v3.1 document. /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) + /// + public void SerializeAsV31(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); writer.WriteStartObject(); + + // openApi; + writer.WriteProperty(OpenApiConstants.OpenApi, "3.1.0"); + + // jsonSchemaDialect + writer.WriteProperty(OpenApiConstants.JsonSchemaDialect, JsonSchemaDialect); - // openapi - switch (version) + Serialize(writer); + + // webhooks + writer.WriteOptionalMap( + OpenApiConstants.Webhooks, + Webhooks, + (w, key, component) => { - case OpenApiSpecVersion.OpenApi3_1: - writer.WriteProperty(OpenApiConstants.OpenApi, "3.1.0"); - break; - case OpenApiSpecVersion.OpenApi3_0: - writer.WriteProperty(OpenApiConstants.OpenApi, "3.0.1"); - break; - default: - writer.WriteProperty(OpenApiConstants.OpenApi, "3.0.1"); - break; - } + if (component.Reference != null && + component.Reference.Type == ReferenceType.PathItem && + component.Reference.Id == key) + { + component.SerializeAsV3WithoutReference(w); + } + else + { + component.SerializeAsV31(w); + } + }); + + writer.WriteEndObject(); + } + + /// + /// Serialize to the latest patch of OpenAPI object V3.0. + /// + public void SerializeAsV3(IOpenApiWriter writer) + { + + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); + + writer.WriteStartObject(); + // openapi + writer.WriteProperty(OpenApiConstants.OpenApi, "3.0.1"); + Serialize(writer); + writer.WriteEndObject(); + } + + /// + /// Serialize + /// + /// + public void Serialize(IOpenApiWriter writer) + { // info writer.WriteRequiredObject(OpenApiConstants.Info, Info, (w, i) => i.SerializeAsV3(w)); - // jsonSchemaDialect - if(version == OpenApiSpecVersion.OpenApi3_1) - writer.WriteProperty(OpenApiConstants.JsonSchemaDialect, JsonSchemaDialect); - // servers writer.WriteOptionalCollection(OpenApiConstants.Servers, Servers, (w, s) => s.SerializeAsV3(w)); // paths writer.WriteRequiredObject(OpenApiConstants.Paths, Paths, (w, p) => p.SerializeAsV3(w)); - // webhooks - if (version == OpenApiSpecVersion.OpenApi3_1) - { - writer.WriteOptionalMap( - OpenApiConstants.Webhooks, - Webhooks, - (w, key, component) => - { - if (component.Reference != null && - component.Reference.Type == ReferenceType.PathItem && - component.Reference.Id == key) - { - component.SerializeAsV3WithoutReference(w); - } - else - { - component.SerializeAsV3(w); - } - }); - } - // components writer.WriteOptionalObject(OpenApiConstants.Components, Components, (w, c) => c.SerializeAsV3(w)); @@ -181,9 +191,7 @@ public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = Op writer.WriteOptionalObject(OpenApiConstants.ExternalDocs, ExternalDocs, (w, e) => e.SerializeAsV3(w)); // extensions - writer.WriteExtensions(Extensions, version); - - writer.WriteEndObject(); + writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); } /// diff --git a/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs b/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs index 7010f8f2c..9e43e3be6 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs @@ -70,16 +70,31 @@ public OpenApiEncoding(OpenApiEncoding encoding) AllowReserved = encoding?.AllowReserved ?? AllowReserved; Extensions = encoding?.Extensions != null ? new Dictionary(encoding.Extensions) : null; } - + + /// + /// Serialize to Open Api v3.1 + /// + /// + public void SerializeAsV31(IOpenApiWriter writer) + { + Serialize(writer); + } + + /// + /// Serialize to Open Api v3.0 + /// + /// + public void SerializeAsV3(IOpenApiWriter writer) + { + Serialize(writer); + } + /// /// Serialize to Open Api v3.0. /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) + public void Serialize(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull("writer"); - } + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); writer.WriteStartObject(); @@ -99,7 +114,7 @@ public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = Op writer.WriteProperty(OpenApiConstants.AllowReserved, AllowReserved, false); // extensions - writer.WriteExtensions(Extensions, version); + writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiExample.cs b/src/Microsoft.OpenApi/Models/OpenApiExample.cs index e8aee68f3..2d11690d6 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiExample.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiExample.cs @@ -73,15 +73,30 @@ public OpenApiExample(OpenApiExample example) UnresolvedReference = example?.UnresolvedReference ?? UnresolvedReference; } + /// + /// Serialize to Open Api v3.1 + /// + /// + public void SerializeAsV31(IOpenApiWriter writer) + { + Serialize(writer); + } + /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) + /// + public void SerializeAsV3(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + Serialize(writer); + } + + /// + /// Serialize to Open Api v3.0 + /// + public void Serialize(IOpenApiWriter writer) + { + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); var target = this; diff --git a/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs b/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs index 62dfe2340..af3390a6c 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs @@ -38,15 +38,31 @@ protected OpenApiExtensibleDictionary( /// public IDictionary Extensions { get; set; } = new Dictionary(); + + /// + /// Serialize to Open Api v3.1 + /// + /// + public void SerializeAsV31(IOpenApiWriter writer) + { + Serialize(writer); + } + /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) + /// + public void SerializeAsV3(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + Serialize(writer); + } + + /// + /// Serialize to Open Api v3.0 + /// + public void Serialize(IOpenApiWriter writer) + { + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); writer.WriteStartObject(); @@ -55,7 +71,7 @@ public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = Op writer.WriteRequiredObject(item.Key, item.Value, (w, p) => p.SerializeAsV3(w)); } - writer.WriteExtensions(Extensions, version); + writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiExternalDocs.cs b/src/Microsoft.OpenApi/Models/OpenApiExternalDocs.cs index f7deb148c..0fb04914c 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiExternalDocs.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiExternalDocs.cs @@ -43,13 +43,21 @@ public OpenApiExternalDocs(OpenApiExternalDocs externalDocs) Url = externalDocs?.Url != null ? new Uri(externalDocs.Url.OriginalString) : null; Extensions = externalDocs?.Extensions != null ? new Dictionary(externalDocs.Extensions) : null; } - + + /// + /// Serialize to Open Api v3.1. + /// + public void SerializeAsV31(IOpenApiWriter writer) + { + WriteInternal(writer, OpenApiSpecVersion.OpenApi3_1); + } + /// /// Serialize to Open Api v3.0. /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) + public void SerializeAsV3(IOpenApiWriter writer) { - WriteInternal(writer, version); + WriteInternal(writer, OpenApiSpecVersion.OpenApi3_0); } /// @@ -62,10 +70,7 @@ public void SerializeAsV2(IOpenApiWriter writer) private void WriteInternal(IOpenApiWriter writer, OpenApiSpecVersion specVersion) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); writer.WriteStartObject(); diff --git a/src/Microsoft.OpenApi/Models/OpenApiHeader.cs b/src/Microsoft.OpenApi/Models/OpenApiHeader.cs index 790fe4dce..8ae593824 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiHeader.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiHeader.cs @@ -111,16 +111,29 @@ public OpenApiHeader(OpenApiHeader header) Content = header?.Content != null ? new Dictionary(header.Content) : null; Extensions = header?.Extensions != null ? new Dictionary(header.Extensions) : null; } - + + /// + /// Serialize to Open Api v3.1 + /// + public void SerializeAsV31(IOpenApiWriter writer) + { + Serialize(writer); + } + /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) + public void SerializeAsV3(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + Serialize(writer); + } + + /// + /// Serialize to Open Api v3.0 + /// + public void Serialize(IOpenApiWriter writer) + { + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); var target = this; diff --git a/src/Microsoft.OpenApi/Models/OpenApiInfo.cs b/src/Microsoft.OpenApi/Models/OpenApiInfo.cs index 7fa070f00..1d4f9c3a1 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiInfo.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiInfo.cs @@ -72,27 +72,39 @@ public OpenApiInfo(OpenApiInfo info) License = info?.License != null ? new(info?.License) : null; Extensions = info?.Extensions != null ? new Dictionary(info.Extensions) : null; } - + + /// + /// Serialize to Open Api v3.1 + /// + public void SerializeAsV31(IOpenApiWriter writer) + { + Serialize(writer); + + // summary - present in 3.1 + writer.WriteProperty(OpenApiConstants.Summary, Summary); + writer.WriteEndObject(); + } + /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) + public void SerializeAsV3(IOpenApiWriter writer) + { + Serialize(writer); + + writer.WriteEndObject(); + } + + /// + /// Serialize to Open Api v3.0 + /// + public void Serialize(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } - + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); writer.WriteStartObject(); // title writer.WriteProperty(OpenApiConstants.Title, Title); - - // summary - present in 3.1 - if (version == OpenApiSpecVersion.OpenApi3_1) - { - writer.WriteProperty(OpenApiConstants.Summary, Summary); - } // description writer.WriteProperty(OpenApiConstants.Description, Description); @@ -111,8 +123,6 @@ public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = Op // specification extensions writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); - - writer.WriteEndObject(); } /// diff --git a/src/Microsoft.OpenApi/Models/OpenApiLicense.cs b/src/Microsoft.OpenApi/Models/OpenApiLicense.cs index 37a792de9..b78a92e07 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiLicense.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiLicense.cs @@ -49,13 +49,24 @@ public OpenApiLicense(OpenApiLicense license) Url = license?.Url != null ? new Uri(license.Url.OriginalString) : null; Extensions = license?.Extensions != null ? new Dictionary(license.Extensions) : null; } + + /// + /// Serialize to Open Api v3.1 + /// + public void SerializeAsV31(IOpenApiWriter writer) + { + WriteInternal(writer, OpenApiSpecVersion.OpenApi3_1); + writer.WriteProperty(OpenApiConstants.Identifier, Identifier); + writer.WriteEndObject(); + } /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) - { - WriteInternal(writer, version); + public void SerializeAsV3(IOpenApiWriter writer) + { + WriteInternal(writer, OpenApiSpecVersion.OpenApi3_0); + writer.WriteEndObject(); } /// @@ -64,33 +75,22 @@ public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = Op public void SerializeAsV2(IOpenApiWriter writer) { WriteInternal(writer, OpenApiSpecVersion.OpenApi2_0); + writer.WriteEndObject(); } private void WriteInternal(IOpenApiWriter writer, OpenApiSpecVersion specVersion) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } - + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); writer.WriteStartObject(); - + // name writer.WriteProperty(OpenApiConstants.Name, Name); - // identifier - present in v3.1 - if (specVersion == OpenApiSpecVersion.OpenApi3_1) - { - writer.WriteProperty(OpenApiConstants.Identifier, Identifier); - } - // url writer.WriteProperty(OpenApiConstants.Url, Url?.OriginalString); // specification extensions writer.WriteExtensions(Extensions, specVersion); - - writer.WriteEndObject(); } } } diff --git a/src/Microsoft.OpenApi/Models/OpenApiLink.cs b/src/Microsoft.OpenApi/Models/OpenApiLink.cs index 7e0c7093a..f9bfadabc 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiLink.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiLink.cs @@ -82,15 +82,28 @@ public OpenApiLink(OpenApiLink link) Reference = link?.Reference != null ? new(link?.Reference) : null; } + /// + /// Serialize to Open Api v3.1 + /// + public void SerializeAsV31(IOpenApiWriter writer) + { + Serialize(writer); + } + /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) + public void SerializeAsV3(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + Serialize(writer); + } + + /// + /// Serialize + /// + public void Serialize(IOpenApiWriter writer) + { + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); var target = this; @@ -107,7 +120,6 @@ public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = Op } } target.SerializeAsV3WithoutReference(writer); - } /// diff --git a/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs b/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs index 4b195d82d..dec691422 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs @@ -60,15 +60,28 @@ public OpenApiMediaType(OpenApiMediaType mediaType) Extensions = mediaType?.Extensions != null ? new Dictionary(mediaType.Extensions) : null; } + /// + /// Serialize to Open Api v3.1. + /// + public void SerializeAsV31(IOpenApiWriter writer) + { + Serialize(writer); + } + + /// + /// Serialize to Open Api v3.0. + /// + public void SerializeAsV3(IOpenApiWriter writer) + { + Serialize(writer); + } + /// /// Serialize to Open Api v3.0. /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) + public void Serialize(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); writer.WriteStartObject(); @@ -85,7 +98,7 @@ public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = Op writer.WriteOptionalMap(OpenApiConstants.Encoding, Encoding, (w, e) => e.SerializeAsV3(w)); // extensions - writer.WriteExtensions(Extensions, version); + writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlow.cs b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlow.cs index eb8855214..e9e0a62bc 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlow.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlow.cs @@ -58,15 +58,28 @@ public OpenApiOAuthFlow(OpenApiOAuthFlow oAuthFlow) Extensions = oAuthFlow?.Extensions != null ? new Dictionary(oAuthFlow.Extensions) : null; } + /// + /// Serialize to Open Api v3.1 + /// + public void SerializeAsV31(IOpenApiWriter writer) + { + Serialize(writer); + } + + /// + /// Serialize to Open Api v3.0 + /// + public void SerializeAsV3(IOpenApiWriter writer) + { + Serialize(writer); + } + /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) + public void Serialize(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); writer.WriteStartObject(); @@ -83,7 +96,7 @@ public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = Op writer.WriteRequiredMap(OpenApiConstants.Scopes, Scopes, (w, s) => w.WriteValue(s)); // extensions - writer.WriteExtensions(Extensions, version); + writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs index bcde2c85f..9f849a0c1 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs @@ -56,15 +56,28 @@ public OpenApiOAuthFlows(OpenApiOAuthFlows oAuthFlows) Extensions = oAuthFlows?.Extensions != null ? new Dictionary(oAuthFlows.Extensions) : null; } + /// + /// Serialize to Open Api v3.1 + /// + public void SerializeAsV31(IOpenApiWriter writer) + { + Serialize(writer); + } + /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) + public void SerializeAsV3(IOpenApiWriter writer) + { + Serialize(writer); + } + + /// + /// Serialize + /// + public void Serialize(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); writer.WriteStartObject(); @@ -87,7 +100,7 @@ public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = Op (w, o) => o.SerializeAsV3(w)); // extensions - writer.WriteExtensions(Extensions, version); + writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs index 031be3be4..e30074704 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs @@ -131,15 +131,28 @@ public OpenApiOperation(OpenApiOperation operation) Extensions = operation?.Extensions != null ? new Dictionary(operation.Extensions) : null; } + /// + /// Serialize to Open Api v3.1. + /// + public void SerializeAsV31(IOpenApiWriter writer) + { + Serialize(writer); + } + /// /// Serialize to Open Api v3.0. /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) + public void SerializeAsV3(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + Serialize(writer); + } + + /// + /// Serialize to Open Api v3.0. + /// + public void Serialize(IOpenApiWriter writer) + { + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); writer.WriteStartObject(); @@ -186,7 +199,7 @@ public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = Op writer.WriteOptionalCollection(OpenApiConstants.Servers, Servers, (w, s) => s.SerializeAsV3(w)); // specification extensions - writer.WriteExtensions(Extensions, version); + writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs index 1b0c6dc53..73e444b61 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs @@ -168,16 +168,29 @@ public OpenApiParameter(OpenApiParameter parameter) AllowEmptyValue = parameter?.AllowEmptyValue ?? AllowEmptyValue; Deprecated = parameter?.Deprecated ?? Deprecated; } - + + /// + /// Serialize to Open Api v3.1 + /// + public void SerializeAsV31(IOpenApiWriter writer) + { + Serialize(writer); + } + /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) + public void SerializeAsV3(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + Serialize(writer); + } + + /// + /// Serialize + /// + public void Serialize(IOpenApiWriter writer) + { + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); var target = this; diff --git a/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs b/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs index df5e5e060..b32209d5c 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System.Collections.Generic; @@ -85,15 +85,28 @@ public OpenApiPathItem(OpenApiPathItem pathItem) Reference = pathItem?.Reference != null ? new(pathItem?.Reference) : null; } + /// + /// Serialize to Open Api v3.1 + /// + public void SerializeAsV31(IOpenApiWriter writer) + { + Serialize(writer); + } + /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) + public void SerializeAsV3(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + Serialize(writer); + } + + /// + /// Serialize to Open Api v3.0 + /// + public void Serialize(IOpenApiWriter writer) + { + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); var target = this; if (Reference != null) diff --git a/src/Microsoft.OpenApi/Models/OpenApiReference.cs b/src/Microsoft.OpenApi/Models/OpenApiReference.cs index f070e01b3..4df154331 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiReference.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiReference.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; @@ -143,15 +144,35 @@ public OpenApiReference(OpenApiReference reference) HostDocument = new(reference?.HostDocument); } + /// + /// Serialize to Open Api v3.1. + /// + public void SerializeAsV31(IOpenApiWriter writer) + { + Serialize(writer); + + // summary and description are in 3.1 but not in 3.0 + writer.WriteProperty(OpenApiConstants.Summary, Summary); + writer.WriteProperty(OpenApiConstants.Description, Description); + + writer.WriteEndObject(); + } + /// /// Serialize to Open Api v3.0. /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) + public void SerializeAsV3(IOpenApiWriter writer) + { + Serialize(writer); + writer.WriteEndObject(); + } + + /// + /// Serialize + /// + public void Serialize(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); if (Type == ReferenceType.Tag) { @@ -167,18 +188,10 @@ public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = Op return; } - writer.WriteStartObject(); - - if (version == OpenApiSpecVersion.OpenApi3_1) - { - writer.WriteProperty(OpenApiConstants.Summary, Summary); - writer.WriteProperty(OpenApiConstants.Description, Description); - } + writer.WriteStartObject(); // $ref writer.WriteProperty(OpenApiConstants.DollarRef, ReferenceV3); - - writer.WriteEndObject(); } /// @@ -186,10 +199,7 @@ public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = Op /// public void SerializeAsV2(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); if (Type == ReferenceType.Tag) { diff --git a/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs b/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs index f53636bb8..397bb1721 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs @@ -65,15 +65,28 @@ public OpenApiRequestBody(OpenApiRequestBody requestBody) Extensions = requestBody?.Extensions != null ? new Dictionary(requestBody.Extensions) : null; } + /// + /// Serialize to Open Api v3.1 + /// + public void SerializeAsV31(IOpenApiWriter writer) + { + Serialize(writer); + } + /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) + public void SerializeAsV3(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + Serialize(writer); + } + + /// + /// Serialize to Open Api v3.0 + /// + public void Serialize(IOpenApiWriter writer) + { + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); var target = this; diff --git a/src/Microsoft.OpenApi/Models/OpenApiResponse.cs b/src/Microsoft.OpenApi/Models/OpenApiResponse.cs index 47f906ed0..0a2856118 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiResponse.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiResponse.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System.Collections.Generic; @@ -70,15 +70,28 @@ public OpenApiResponse(OpenApiResponse response) Reference = response?.Reference != null ? new(response?.Reference) : null; } + /// + /// Serialize to Open Api v3.1 + /// + public void SerializeAsV31(IOpenApiWriter writer) + { + Serialize(writer); + } + /// /// Serialize to Open Api v3.0. /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) + public void SerializeAsV3(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + Serialize(writer); + } + + /// + /// Serialize + /// + public void Serialize(IOpenApiWriter writer) + { + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); var target = this; diff --git a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs index ec456ed6e..ec0362d8f 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs @@ -292,15 +292,28 @@ public OpenApiSchema(OpenApiSchema schema) Reference = schema?.Reference != null ? new(schema?.Reference) : null; } + /// + /// Serialize to Open Api v3.1 + /// + public void SerializeAsV31(IOpenApiWriter writer) + { + Serialize(writer); + } + /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) + public void SerializeAsV3(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + Serialize(writer); + } + + /// + /// Serialize to Open Api v3.0 + /// + public void Serialize(IOpenApiWriter writer) + { + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); var settings = writer.GetSettings(); var target = this; diff --git a/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs b/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs index a7eaab07d..df880595c 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs @@ -28,15 +28,28 @@ public OpenApiSecurityRequirement() { } + /// + /// Serialize to Open Api v3.1 + /// + public void SerializeAsV31(IOpenApiWriter writer) + { + Serialize(writer); + } + /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) + public void SerializeAsV3(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + Serialize(writer); + } + + /// + /// Serialize + /// + public void Serialize(IOpenApiWriter writer) + { + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); writer.WriteStartObject(); diff --git a/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs b/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs index 51ae87d1f..df200ace7 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs @@ -77,7 +77,7 @@ public class OpenApiSecurityScheme : IOpenApiSerializable, IOpenApiReferenceable /// /// Parameterless constructor /// - public OpenApiSecurityScheme() {} + public OpenApiSecurityScheme() { } /// /// Initializes a copy of object @@ -97,16 +97,28 @@ public OpenApiSecurityScheme(OpenApiSecurityScheme securityScheme) Reference = securityScheme?.Reference != null ? new(securityScheme?.Reference) : null; } + /// + /// Serialize to Open Api v3.1 + /// + public void SerializeAsV31(IOpenApiWriter writer) + { + Serialize(writer); + } + /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) + public void SerializeAsV3(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } - + Serialize(writer); + } + + /// + /// Serialize to Open Api v3.0 + /// + public void Serialize(IOpenApiWriter writer) + { + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); if (Reference != null) { diff --git a/src/Microsoft.OpenApi/Models/OpenApiServer.cs b/src/Microsoft.OpenApi/Models/OpenApiServer.cs index ef089725a..d5623a5e8 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiServer.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiServer.cs @@ -39,7 +39,7 @@ public class OpenApiServer : IOpenApiSerializable, IOpenApiExtensible /// /// Parameterless constructor /// - public OpenApiServer() {} + public OpenApiServer() { } /// /// Initializes a copy of an object @@ -52,15 +52,28 @@ public OpenApiServer(OpenApiServer server) Extensions = server?.Extensions != null ? new Dictionary(server.Extensions) : null; } + /// + /// Serialize to Open Api v3.1 + /// + public void SerializeAsV31(IOpenApiWriter writer) + { + Serialize(writer); + } + + /// + /// Serialize to Open Api v3.0 + /// + public void SerializeAsV3(IOpenApiWriter writer) + { + Serialize(writer); + } + /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) + public void Serialize(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); writer.WriteStartObject(); @@ -74,7 +87,7 @@ public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = Op writer.WriteOptionalMap(OpenApiConstants.Variables, Variables, (w, v) => v.SerializeAsV3(w)); // specification extensions - writer.WriteExtensions(Extensions, version); + writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiServerVariable.cs b/src/Microsoft.OpenApi/Models/OpenApiServerVariable.cs index bfa4cd840..9732876b3 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiServerVariable.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiServerVariable.cs @@ -50,15 +50,28 @@ public OpenApiServerVariable(OpenApiServerVariable serverVariable) Extensions = serverVariable?.Extensions != null ? new Dictionary(serverVariable?.Extensions) : serverVariable?.Extensions; } + /// + /// Serialize to Open Api v3.1 + /// + public void SerializeAsV31(IOpenApiWriter writer) + { + Serialize(writer); + } + + /// + /// Serialize to Open Api v3.0 + /// + public void SerializeAsV3(IOpenApiWriter writer) + { + Serialize(writer); + } + /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) + public void Serialize(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); writer.WriteStartObject(); @@ -72,7 +85,7 @@ public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = Op writer.WriteOptionalCollection(OpenApiConstants.Enum, Enum, (w, s) => w.WriteValue(s)); // specification extensions - writer.WriteExtensions(Extensions, version); + writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiTag.cs b/src/Microsoft.OpenApi/Models/OpenApiTag.cs index 503699cfa..73e39d5ca 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiTag.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiTag.cs @@ -46,7 +46,7 @@ public class OpenApiTag : IOpenApiSerializable, IOpenApiReferenceable, IOpenApiE /// /// Parameterless constructor /// - public OpenApiTag() {} + public OpenApiTag() { } /// /// Initializes a copy of an object @@ -60,16 +60,29 @@ public OpenApiTag(OpenApiTag tag) UnresolvedReference = tag?.UnresolvedReference ?? UnresolvedReference; Reference = tag?.Reference != null ? new(tag?.Reference) : null; } - + + /// + /// Serialize to Open Api v3.1 + /// + public void SerializeAsV31(IOpenApiWriter writer) + { + Serialize(writer); + } + /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) + public void SerializeAsV3(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + Serialize(writer); + } + + /// + /// Serialize to Open Api v3.0 + /// + public void Serialize(IOpenApiWriter writer) + { + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); if (Reference != null) { diff --git a/src/Microsoft.OpenApi/Models/OpenApiXml.cs b/src/Microsoft.OpenApi/Models/OpenApiXml.cs index b8c71118f..358b42cb3 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiXml.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiXml.cs @@ -67,9 +67,17 @@ public OpenApiXml(OpenApiXml xml) /// /// Serialize to Open Api v3.0 /// - public void SerializeAsV3(IOpenApiWriter writer, OpenApiSpecVersion version = OpenApiSpecVersion.OpenApi3_0) + public void SerializeAsV31(IOpenApiWriter writer) { - Write(writer, version); + Write(writer, OpenApiSpecVersion.OpenApi3_1); + } + + /// + /// Serialize to Open Api v3.0 + /// + public void SerializeAsV3(IOpenApiWriter writer) + { + Write(writer, OpenApiSpecVersion.OpenApi3_0); } /// @@ -82,10 +90,7 @@ public void SerializeAsV2(IOpenApiWriter writer) private void Write(IOpenApiWriter writer, OpenApiSpecVersion specVersion) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); writer.WriteStartObject(); From f381fb727542d78bf10fa9d7622cc2faa582da91 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 20 Feb 2023 14:23:32 +0300 Subject: [PATCH 08/20] Clean up tests --- .../Samples/OpenApiDocument/documentWithReusablePaths.yaml | 1 + test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDocument/documentWithReusablePaths.yaml b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDocument/documentWithReusablePaths.yaml index ffb3aa252..de2f05420 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDocument/documentWithReusablePaths.yaml +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDocument/documentWithReusablePaths.yaml @@ -2,6 +2,7 @@ info: title: Webhook Example version: 1.0.0 +jsonSchemaDialect: "http://json-schema.org/draft-07/schema#" webhooks: /pets: "$ref": '#/components/pathItems/pets' diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs index b0cc726c8..b28528f89 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs @@ -1439,7 +1439,7 @@ public async void SerializeDocumentWithWebhooksAsV3JsonWorks(bool produceTerseOu var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - DocumentWithWebhooks.SerializeAsV3(writer, OpenApiSpecVersion.OpenApi3_1); + DocumentWithWebhooks.SerializeAsV31(writer); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); From 970a74c9f3979974b4a6166178d744d79270dc2b Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 22 Feb 2023 11:23:58 +0300 Subject: [PATCH 09/20] Simplify null check by using a coalescing operator --- src/Microsoft.OpenApi/Models/OpenApiDocument.cs | 5 +---- .../Models/OpenApiExtensibleDictionary.cs | 5 +---- src/Microsoft.OpenApi/Models/OpenApiHeader.cs | 5 +---- src/Microsoft.OpenApi/Models/OpenApiInfo.cs | 5 +---- src/Microsoft.OpenApi/Models/OpenApiOperation.cs | 5 +---- src/Microsoft.OpenApi/Models/OpenApiParameter.cs | 5 +---- src/Microsoft.OpenApi/Models/OpenApiPathItem.cs | 7 ++----- src/Microsoft.OpenApi/Models/OpenApiResponse.cs | 7 ++----- src/Microsoft.OpenApi/Models/OpenApiSchema.cs | 5 +---- src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs | 5 +---- src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs | 5 +---- src/Microsoft.OpenApi/Models/OpenApiTag.cs | 5 +---- 12 files changed, 14 insertions(+), 50 deletions(-) diff --git a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs index 6a290015a..3fd7d0ab0 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs @@ -199,10 +199,7 @@ public void Serialize(IOpenApiWriter writer) /// public void SerializeAsV2(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); writer.WriteStartObject(); diff --git a/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs b/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs index af3390a6c..a5111f2b7 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs @@ -81,10 +81,7 @@ public void Serialize(IOpenApiWriter writer) /// public void SerializeAsV2(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); writer.WriteStartObject(); diff --git a/src/Microsoft.OpenApi/Models/OpenApiHeader.cs b/src/Microsoft.OpenApi/Models/OpenApiHeader.cs index 8ae593824..9d3cf31b7 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiHeader.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiHeader.cs @@ -222,10 +222,7 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer) /// public void SerializeAsV2(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); var target = this; diff --git a/src/Microsoft.OpenApi/Models/OpenApiInfo.cs b/src/Microsoft.OpenApi/Models/OpenApiInfo.cs index 1d4f9c3a1..2ca7f0426 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiInfo.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiInfo.cs @@ -130,10 +130,7 @@ public void Serialize(IOpenApiWriter writer) /// public void SerializeAsV2(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); writer.WriteStartObject(); diff --git a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs index e30074704..5ac303216 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs @@ -209,10 +209,7 @@ public void Serialize(IOpenApiWriter writer) /// public void SerializeAsV2(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); writer.WriteStartObject(); diff --git a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs index 73e444b61..0b018fdd9 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs @@ -284,10 +284,7 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer) /// public void SerializeAsV2(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); var target = this; if (Reference != null) diff --git a/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs b/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs index b32209d5c..1a156e4e3 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System.Collections.Generic; @@ -146,10 +146,7 @@ public OpenApiPathItem GetEffective(OpenApiDocument doc) /// public void SerializeAsV2(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); var target = this; diff --git a/src/Microsoft.OpenApi/Models/OpenApiResponse.cs b/src/Microsoft.OpenApi/Models/OpenApiResponse.cs index 0a2856118..e0c105a3e 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiResponse.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiResponse.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System.Collections.Generic; @@ -157,10 +157,7 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer) /// public void SerializeAsV2(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); var target = this; diff --git a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs index ec0362d8f..6dc7939ea 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs @@ -510,10 +510,7 @@ internal void SerializeAsV2( ISet parentRequiredProperties, string propertyName) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); var settings = writer.GetSettings(); var target = this; diff --git a/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs b/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs index df880595c..69a959005 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs @@ -86,10 +86,7 @@ public void Serialize(IOpenApiWriter writer) /// public void SerializeAsV2(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); writer.WriteStartObject(); diff --git a/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs b/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs index df200ace7..6618e402e 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs @@ -181,10 +181,7 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer) /// public void SerializeAsV2(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); if (Reference != null) { diff --git a/src/Microsoft.OpenApi/Models/OpenApiTag.cs b/src/Microsoft.OpenApi/Models/OpenApiTag.cs index 73e39d5ca..b17a2b052 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiTag.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiTag.cs @@ -120,10 +120,7 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer) /// public void SerializeAsV2(IOpenApiWriter writer) { - if (writer == null) - { - throw Error.ArgumentNull(nameof(writer)); - } + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); if (Reference != null) { From 862504fb1d9e07f6f2e81c1a5fa41d1bea6d3c29 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 22 Feb 2023 11:24:43 +0300 Subject: [PATCH 10/20] Clean up tests --- ...orks_produceTerseOutput=False.verified.txt | 42 +++++++++---------- ...Works_produceTerseOutput=True.verified.txt | 2 +- .../Models/OpenApiDocumentTests.cs | 30 ++++++------- .../Models/OpenApiInfoTests.cs | 4 +- 4 files changed, 40 insertions(+), 38 deletions(-) diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.SerializeDocumentWithWebhooksAsV3JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.SerializeDocumentWithWebhooksAsV3JsonWorks_produceTerseOutput=False.verified.txt index f7424fa62..4eebd3082 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.SerializeDocumentWithWebhooksAsV3JsonWorks_produceTerseOutput=False.verified.txt +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.SerializeDocumentWithWebhooksAsV3JsonWorks_produceTerseOutput=False.verified.txt @@ -5,27 +5,6 @@ "version": "1.0.0" }, "paths": { }, - "webhooks": { - "newPet": { - "post": { - "requestBody": { - "description": "Information about a new pet in the system", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Pet" - } - } - } - }, - "responses": { - "200": { - "description": "Return a 200 status to indicate that the data was received successfully" - } - } - } - } - }, "components": { "schemas": { "Pet": { @@ -47,5 +26,26 @@ } } } + }, + "webhooks": { + "newPet": { + "post": { + "requestBody": { + "description": "Information about a new pet in the system", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Pet" + } + } + } + }, + "responses": { + "200": { + "description": "Return a 200 status to indicate that the data was received successfully" + } + } + } + } } } \ No newline at end of file diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.SerializeDocumentWithWebhooksAsV3JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.SerializeDocumentWithWebhooksAsV3JsonWorks_produceTerseOutput=True.verified.txt index ca0abf4e2..d105617d2 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.SerializeDocumentWithWebhooksAsV3JsonWorks_produceTerseOutput=True.verified.txt +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.SerializeDocumentWithWebhooksAsV3JsonWorks_produceTerseOutput=True.verified.txt @@ -1 +1 @@ -{"openapi":"3.1.0","info":{"title":"Webhook Example","version":"1.0.0"},"paths":{},"webhooks":{"newPet":{"post":{"requestBody":{"description":"Information about a new pet in the system","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Pet"}}}},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}}}}},"components":{"schemas":{"Pet":{"required":["id","name"],"properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"tag":{"type":"string"}}}}}} \ No newline at end of file +{"openapi":"3.1.0","info":{"title":"Webhook Example","version":"1.0.0"},"paths":{},"components":{"schemas":{"Pet":{"required":["id","name"],"properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"tag":{"type":"string"}}}}},"webhooks":{"newPet":{"post":{"requestBody":{"description":"Information about a new pet in the system","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Pet"}}}},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}}}}}} \ No newline at end of file diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs index b28528f89..b33055936 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs @@ -12,9 +12,11 @@ using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Readers; using Microsoft.OpenApi.Writers; +using Microsoft.VisualBasic; using VerifyXunit; using Xunit; using Xunit.Abstractions; +using static System.Net.Mime.MediaTypeNames; namespace Microsoft.OpenApi.Tests.Models { @@ -1456,18 +1458,6 @@ public void SerializeDocumentWithWebhooksAsV3YamlWorks() title: Webhook Example version: 1.0.0 paths: { } -webhooks: - newPet: - post: - requestBody: - description: Information about a new pet in the system - content: - application/json: - schema: - $ref: '#/components/schemas/Pet' - responses: - '200': - description: Return a 200 status to indicate that the data was received successfully components: schemas: Pet: @@ -1481,7 +1471,19 @@ public void SerializeDocumentWithWebhooksAsV3YamlWorks() name: type: string tag: - type: string"; + type: string +webhooks: + newPet: + post: + requestBody: + description: Information about a new pet in the system + content: + application/json: + schema: + $ref: '#/components/schemas/Pet' + responses: + '200': + description: Return a 200 status to indicate that the data was received successfully"; // Act var actual = DocumentWithWebhooks.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_1); @@ -1507,10 +1509,10 @@ public void SerializeDocumentWithRootJsonSchemaDialectPropertyWorks() }; var expected = @"openapi: '3.1.0' +jsonSchemaDialect: http://json-schema.org/draft-07/schema# info: title: JsonSchemaDialectTest version: 1.0.0 -jsonSchemaDialect: http://json-schema.org/draft-07/schema# paths: { }"; // Act diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiInfoTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiInfoTests.cs index 42ed5ae1f..72cd9070f 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiInfoTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiInfoTests.cs @@ -206,7 +206,7 @@ public void InfoVersionShouldAcceptDateStyledAsVersions() } [Fact] - public void SerializeInfoObjectWithSummaryAsV3YamlWorks() + public void SerializeInfoObjectWithSummaryAsV31YamlWorks() { // Arrange var expected = @"title: Sample Pet Store App @@ -224,7 +224,7 @@ public void SerializeInfoObjectWithSummaryAsV3YamlWorks() } [Fact] - public void SerializeInfoObjectWithSummaryAsV3JsonWorks() + public void SerializeInfoObjectWithSummaryAsV31JsonWorks() { // Arrange var expected = @"{ From a6a68c2459c3c954e6cbac806876b75019caf6cc Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 22 Feb 2023 11:24:52 +0300 Subject: [PATCH 11/20] Update public API --- .../PublicApi/PublicApi.approved.txt | 115 +++++++++++++----- 1 file changed, 85 insertions(+), 30 deletions(-) diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt index 85e995ee1..75edc98ea 100755 --- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt +++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt @@ -313,7 +313,8 @@ namespace Microsoft.OpenApi.Interfaces public interface IOpenApiSerializable : Microsoft.OpenApi.Interfaces.IOpenApiElement { void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer); - void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion specVersion = 1); + void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer); + void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer); } } namespace Microsoft.OpenApi @@ -349,9 +350,11 @@ namespace Microsoft.OpenApi.Models public bool UnresolvedReference { get; set; } public void AddPathItem(Microsoft.OpenApi.Expressions.RuntimeExpression expression, Microsoft.OpenApi.Models.OpenApiPathItem pathItem) { } public Microsoft.OpenApi.Models.OpenApiCallback GetEffective(Microsoft.OpenApi.Models.OpenApiDocument doc) { } + public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiComponents : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable @@ -369,8 +372,10 @@ namespace Microsoft.OpenApi.Models public System.Collections.Generic.IDictionary Responses { get; set; } public System.Collections.Generic.IDictionary Schemas { get; set; } public System.Collections.Generic.IDictionary SecuritySchemes { get; set; } + public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public static class OpenApiConstants { @@ -513,7 +518,8 @@ namespace Microsoft.OpenApi.Models public string Name { get; set; } public System.Uri Url { get; set; } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiDiscriminator : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -521,8 +527,10 @@ namespace Microsoft.OpenApi.Models public OpenApiDiscriminator(Microsoft.OpenApi.Models.OpenApiDiscriminator discriminator) { } public System.Collections.Generic.IDictionary Mapping { get; set; } public string PropertyName { get; set; } + public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiDocument : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -542,8 +550,10 @@ namespace Microsoft.OpenApi.Models public Microsoft.OpenApi.Services.OpenApiWorkspace Workspace { get; set; } public Microsoft.OpenApi.Interfaces.IOpenApiReferenceable ResolveReference(Microsoft.OpenApi.Models.OpenApiReference reference) { } public System.Collections.Generic.IEnumerable ResolveReferences() { } + public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public static string GenerateHashValue(Microsoft.OpenApi.Models.OpenApiDocument doc) { } } public class OpenApiEncoding : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable @@ -556,8 +566,10 @@ namespace Microsoft.OpenApi.Models public System.Collections.Generic.IDictionary Extensions { get; set; } public System.Collections.Generic.IDictionary Headers { get; set; } public Microsoft.OpenApi.Models.ParameterStyle? Style { get; set; } + public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiError { @@ -580,9 +592,11 @@ namespace Microsoft.OpenApi.Models public bool UnresolvedReference { get; set; } public Microsoft.OpenApi.Any.IOpenApiAny Value { get; set; } public Microsoft.OpenApi.Models.OpenApiExample GetEffective(Microsoft.OpenApi.Models.OpenApiDocument doc) { } + public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public abstract class OpenApiExtensibleDictionary : System.Collections.Generic.Dictionary, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable @@ -591,8 +605,10 @@ namespace Microsoft.OpenApi.Models protected OpenApiExtensibleDictionary() { } protected OpenApiExtensibleDictionary(System.Collections.Generic.Dictionary dictionary = null, System.Collections.Generic.IDictionary extensions = null) { } public System.Collections.Generic.IDictionary Extensions { get; set; } + public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiExternalDocs : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -602,7 +618,8 @@ namespace Microsoft.OpenApi.Models public System.Collections.Generic.IDictionary Extensions { get; set; } public System.Uri Url { get; set; } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiHeader : Microsoft.OpenApi.Interfaces.IEffective, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -623,9 +640,11 @@ namespace Microsoft.OpenApi.Models public Microsoft.OpenApi.Models.ParameterStyle? Style { get; set; } public bool UnresolvedReference { get; set; } public Microsoft.OpenApi.Models.OpenApiHeader GetEffective(Microsoft.OpenApi.Models.OpenApiDocument doc) { } + public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiInfo : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable @@ -640,8 +659,10 @@ namespace Microsoft.OpenApi.Models public System.Uri TermsOfService { get; set; } public string Title { get; set; } public string Version { get; set; } + public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiLicense : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -652,7 +673,8 @@ namespace Microsoft.OpenApi.Models public string Name { get; set; } public System.Uri Url { get; set; } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiLink : Microsoft.OpenApi.Interfaces.IEffective, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -668,9 +690,11 @@ namespace Microsoft.OpenApi.Models public Microsoft.OpenApi.Models.OpenApiServer Server { get; set; } public bool UnresolvedReference { get; set; } public Microsoft.OpenApi.Models.OpenApiLink GetEffective(Microsoft.OpenApi.Models.OpenApiDocument doc) { } + public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiMediaType : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable @@ -682,8 +706,10 @@ namespace Microsoft.OpenApi.Models public System.Collections.Generic.IDictionary Examples { get; set; } public System.Collections.Generic.IDictionary Extensions { get; set; } public Microsoft.OpenApi.Models.OpenApiSchema Schema { get; set; } + public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiOAuthFlow : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -694,8 +720,10 @@ namespace Microsoft.OpenApi.Models public System.Uri RefreshUrl { get; set; } public System.Collections.Generic.IDictionary Scopes { get; set; } public System.Uri TokenUrl { get; set; } + public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiOAuthFlows : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -706,8 +734,10 @@ namespace Microsoft.OpenApi.Models public System.Collections.Generic.IDictionary Extensions { get; set; } public Microsoft.OpenApi.Models.OpenApiOAuthFlow Implicit { get; set; } public Microsoft.OpenApi.Models.OpenApiOAuthFlow Password { get; set; } + public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiOperation : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -727,8 +757,10 @@ namespace Microsoft.OpenApi.Models public System.Collections.Generic.IList Servers { get; set; } public string Summary { get; set; } public System.Collections.Generic.IList Tags { get; set; } + public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiParameter : Microsoft.OpenApi.Interfaces.IEffective, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -752,9 +784,11 @@ namespace Microsoft.OpenApi.Models public Microsoft.OpenApi.Models.ParameterStyle? Style { get; set; } public bool UnresolvedReference { get; set; } public Microsoft.OpenApi.Models.OpenApiParameter GetEffective(Microsoft.OpenApi.Models.OpenApiDocument doc) { } + public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiPathItem : Microsoft.OpenApi.Interfaces.IEffective, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable @@ -771,9 +805,11 @@ namespace Microsoft.OpenApi.Models public bool UnresolvedReference { get; set; } public void AddOperation(Microsoft.OpenApi.Models.OperationType operationType, Microsoft.OpenApi.Models.OpenApiOperation operation) { } public Microsoft.OpenApi.Models.OpenApiPathItem GetEffective(Microsoft.OpenApi.Models.OpenApiDocument doc) { } + public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiPaths : Microsoft.OpenApi.Models.OpenApiExtensibleDictionary @@ -795,8 +831,10 @@ namespace Microsoft.OpenApi.Models public string ReferenceV3 { get; } public string Summary { get; set; } public Microsoft.OpenApi.Models.ReferenceType? Type { get; set; } + public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiRequestBody : Microsoft.OpenApi.Interfaces.IEffective, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -809,9 +847,11 @@ namespace Microsoft.OpenApi.Models public bool Required { get; set; } public bool UnresolvedReference { get; set; } public Microsoft.OpenApi.Models.OpenApiRequestBody GetEffective(Microsoft.OpenApi.Models.OpenApiDocument doc) { } + public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiResponse : Microsoft.OpenApi.Interfaces.IEffective, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable @@ -826,9 +866,11 @@ namespace Microsoft.OpenApi.Models public Microsoft.OpenApi.Models.OpenApiReference Reference { get; set; } public bool UnresolvedReference { get; set; } public Microsoft.OpenApi.Models.OpenApiResponse GetEffective(Microsoft.OpenApi.Models.OpenApiDocument doc) { } + public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiResponses : Microsoft.OpenApi.Models.OpenApiExtensibleDictionary @@ -880,16 +922,20 @@ namespace Microsoft.OpenApi.Models public bool WriteOnly { get; set; } public Microsoft.OpenApi.Models.OpenApiXml Xml { get; set; } public Microsoft.OpenApi.Models.OpenApiSchema GetEffective(Microsoft.OpenApi.Models.OpenApiDocument doc) { } + public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiSecurityRequirement : System.Collections.Generic.Dictionary>, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { public OpenApiSecurityRequirement() { } + public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiSecurityScheme : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -906,9 +952,11 @@ namespace Microsoft.OpenApi.Models public string Scheme { get; set; } public Microsoft.OpenApi.Models.SecuritySchemeType Type { get; set; } public bool UnresolvedReference { get; set; } + public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiServer : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable @@ -919,8 +967,10 @@ namespace Microsoft.OpenApi.Models public System.Collections.Generic.IDictionary Extensions { get; set; } public string Url { get; set; } public System.Collections.Generic.IDictionary Variables { get; set; } + public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiServerVariable : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -930,8 +980,10 @@ namespace Microsoft.OpenApi.Models public string Description { get; set; } public System.Collections.Generic.List Enum { get; set; } public System.Collections.Generic.IDictionary Extensions { get; set; } + public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiTag : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { @@ -943,9 +995,11 @@ namespace Microsoft.OpenApi.Models public string Name { get; set; } public Microsoft.OpenApi.Models.OpenApiReference Reference { get; set; } public bool UnresolvedReference { get; set; } + public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiXml : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable @@ -959,7 +1013,8 @@ namespace Microsoft.OpenApi.Models public string Prefix { get; set; } public bool Wrapped { get; set; } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } - public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer, Microsoft.OpenApi.OpenApiSpecVersion version = 1) { } + public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public enum OperationType { From f2f866aa064262cefb25bf82008e68e4eae3be8d Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 27 Feb 2023 11:38:15 +0300 Subject: [PATCH 12/20] Implement PR feedback --- .../Interfaces/IOpenApiReferenceable.cs | 2 +- .../Models/OpenApiCallback.cs | 13 ++++---- .../Models/OpenApiComponents.cs | 30 +++++++++---------- .../Models/OpenApiDiscriminator.cs | 6 ++-- .../Models/OpenApiDocument.cs | 11 +++---- .../Models/OpenApiEncoding.cs | 8 ++--- .../Models/OpenApiExample.cs | 12 ++++---- .../Models/OpenApiExtensibleDictionary.cs | 8 ++--- src/Microsoft.OpenApi/Models/OpenApiHeader.cs | 12 ++++---- src/Microsoft.OpenApi/Models/OpenApiInfo.cs | 8 ++--- src/Microsoft.OpenApi/Models/OpenApiLink.cs | 10 +++---- .../Models/OpenApiMediaType.cs | 8 ++--- .../Models/OpenApiOAuthFlow.cs | 8 ++--- .../Models/OpenApiOAuthFlows.cs | 8 ++--- .../Models/OpenApiOperation.cs | 8 ++--- .../Models/OpenApiParameter.cs | 12 ++++---- .../Models/OpenApiPathItem.cs | 12 ++++---- .../Models/OpenApiReference.cs | 6 ++-- .../Models/OpenApiRequestBody.cs | 12 ++++---- .../Models/OpenApiResponse.cs | 12 ++++---- src/Microsoft.OpenApi/Models/OpenApiSchema.cs | 12 ++++---- .../Models/OpenApiSecurityRequirement.cs | 6 ++-- .../Models/OpenApiSecurityScheme.cs | 12 ++++---- src/Microsoft.OpenApi/Models/OpenApiServer.cs | 8 ++--- .../Models/OpenApiServerVariable.cs | 8 ++--- src/Microsoft.OpenApi/Models/OpenApiTag.cs | 10 +++---- .../V3Tests/OpenApiDocumentTests.cs | 2 +- .../Models/OpenApiCallbackTests.cs | 2 +- .../Models/OpenApiExampleTests.cs | 2 +- .../Models/OpenApiHeaderTests.cs | 2 +- .../Models/OpenApiLinkTests.cs | 2 +- .../Models/OpenApiParameterTests.cs | 6 ++-- .../Models/OpenApiRequestBodyTests.cs | 2 +- .../Models/OpenApiResponseTests.cs | 2 +- .../Models/OpenApiSchemaTests.cs | 2 +- .../Models/OpenApiSecuritySchemeTests.cs | 2 +- .../Models/OpenApiTagTests.cs | 8 ++--- 37 files changed, 148 insertions(+), 146 deletions(-) diff --git a/src/Microsoft.OpenApi/Interfaces/IOpenApiReferenceable.cs b/src/Microsoft.OpenApi/Interfaces/IOpenApiReferenceable.cs index c790e1fda..53d4144e0 100644 --- a/src/Microsoft.OpenApi/Interfaces/IOpenApiReferenceable.cs +++ b/src/Microsoft.OpenApi/Interfaces/IOpenApiReferenceable.cs @@ -25,7 +25,7 @@ public interface IOpenApiReferenceable : IOpenApiSerializable /// /// Serialize to OpenAPI V3 document without using reference. /// - void SerializeAsV3WithoutReference(IOpenApiWriter writer); + void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version); /// /// Serialize to OpenAPI V2 document without using reference. diff --git a/src/Microsoft.OpenApi/Models/OpenApiCallback.cs b/src/Microsoft.OpenApi/Models/OpenApiCallback.cs index 601b53201..dc4e2720c 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiCallback.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiCallback.cs @@ -83,7 +83,7 @@ public void AddPathItem(RuntimeExpression expression, OpenApiPathItem pathItem) /// public void SerializeAsV31(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); } /// @@ -91,14 +91,15 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); } /// /// Serialize /// /// - public void Serialize(IOpenApiWriter writer) + /// + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -116,7 +117,7 @@ public void Serialize(IOpenApiWriter writer) target = GetEffective(Reference.HostDocument); } } - target.SerializeAsV3WithoutReference(writer); + target.SerializeAsV3WithoutReference(writer, version); } /// @@ -141,7 +142,7 @@ public OpenApiCallback GetEffective(OpenApiDocument doc) /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version) { writer.WriteStartObject(); @@ -152,7 +153,7 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer) } // extensions - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiComponents.cs b/src/Microsoft.OpenApi/Models/OpenApiComponents.cs index 9c276823d..8b46ded38 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiComponents.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiComponents.cs @@ -101,7 +101,7 @@ public OpenApiComponents(OpenApiComponents components) /// public void SerializeAsV31(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); // pathItems - only present in v3.1 writer.WriteOptionalMap( @@ -113,7 +113,7 @@ public void SerializeAsV31(IOpenApiWriter writer) component.Reference.Type == ReferenceType.Schema && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w); + component.SerializeAsV3WithoutReference(w, OpenApiSpecVersion.OpenApi3_1); } else { @@ -130,14 +130,14 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); writer.WriteEndObject(); } /// /// Serialize . /// - public void Serialize(IOpenApiWriter writer) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -156,7 +156,7 @@ public void Serialize(IOpenApiWriter writer) OpenApiConstants.Schemas, Schemas, (w, key, component) => { - component.SerializeAsV3WithoutReference(w); + component.SerializeAsV3WithoutReference(w, version); }); } writer.WriteEndObject(); @@ -178,7 +178,7 @@ public void Serialize(IOpenApiWriter writer) component.Reference.Type == ReferenceType.Schema && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w); + component.SerializeAsV3WithoutReference(w, version); } else { @@ -196,7 +196,7 @@ public void Serialize(IOpenApiWriter writer) component.Reference.Type == ReferenceType.Response && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w); + component.SerializeAsV3WithoutReference(w, version); } else { @@ -214,7 +214,7 @@ public void Serialize(IOpenApiWriter writer) component.Reference.Type == ReferenceType.Parameter && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w); + component.SerializeAsV3WithoutReference(w, version); } else { @@ -232,7 +232,7 @@ public void Serialize(IOpenApiWriter writer) component.Reference.Type == ReferenceType.Example && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w); + component.SerializeAsV3WithoutReference(w, version); } else { @@ -250,7 +250,7 @@ public void Serialize(IOpenApiWriter writer) component.Reference.Type == ReferenceType.RequestBody && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w); + component.SerializeAsV3WithoutReference(w, version); } else { @@ -268,7 +268,7 @@ public void Serialize(IOpenApiWriter writer) component.Reference.Type == ReferenceType.Header && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w); + component.SerializeAsV3WithoutReference(w, version); } else { @@ -286,7 +286,7 @@ public void Serialize(IOpenApiWriter writer) component.Reference.Type == ReferenceType.SecurityScheme && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w); + component.SerializeAsV3WithoutReference(w, version); } else { @@ -304,7 +304,7 @@ public void Serialize(IOpenApiWriter writer) component.Reference.Type == ReferenceType.Link && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w); + component.SerializeAsV3WithoutReference(w, version); } else { @@ -322,7 +322,7 @@ public void Serialize(IOpenApiWriter writer) component.Reference.Type == ReferenceType.Callback && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w); + component.SerializeAsV3WithoutReference(w, version); } else { @@ -331,7 +331,7 @@ public void Serialize(IOpenApiWriter writer) }); // extensions - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); } /// diff --git a/src/Microsoft.OpenApi/Models/OpenApiDiscriminator.cs b/src/Microsoft.OpenApi/Models/OpenApiDiscriminator.cs index de4b9eb49..3a2434d10 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiDiscriminator.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiDiscriminator.cs @@ -42,7 +42,7 @@ public OpenApiDiscriminator(OpenApiDiscriminator discriminator) /// public void SerializeAsV31(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer); } /// @@ -50,14 +50,14 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer); } /// /// Serialize to Open Api v3.0 /// /// - public void Serialize(IOpenApiWriter writer) + private void SerializeInternal(IOpenApiWriter writer) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); diff --git a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs index 3fd7d0ab0..148852522 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs @@ -121,7 +121,7 @@ public void SerializeAsV31(IOpenApiWriter writer) // jsonSchemaDialect writer.WriteProperty(OpenApiConstants.JsonSchemaDialect, JsonSchemaDialect); - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); // webhooks writer.WriteOptionalMap( @@ -133,7 +133,7 @@ public void SerializeAsV31(IOpenApiWriter writer) component.Reference.Type == ReferenceType.PathItem && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w); + component.SerializeAsV3WithoutReference(w, OpenApiSpecVersion.OpenApi3_1); } else { @@ -156,7 +156,7 @@ public void SerializeAsV3(IOpenApiWriter writer) // openapi writer.WriteProperty(OpenApiConstants.OpenApi, "3.0.1"); - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); writer.WriteEndObject(); } @@ -164,7 +164,8 @@ public void SerializeAsV3(IOpenApiWriter writer) /// Serialize /// /// - public void Serialize(IOpenApiWriter writer) + /// + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) { // info writer.WriteRequiredObject(OpenApiConstants.Info, Info, (w, i) => i.SerializeAsV3(w)); @@ -185,7 +186,7 @@ public void Serialize(IOpenApiWriter writer) (w, s) => s.SerializeAsV3(w)); // tags - writer.WriteOptionalCollection(OpenApiConstants.Tags, Tags, (w, t) => t.SerializeAsV3WithoutReference(w)); + writer.WriteOptionalCollection(OpenApiConstants.Tags, Tags, (w, t) => t.SerializeAsV3WithoutReference(w, version)); // external docs writer.WriteOptionalObject(OpenApiConstants.ExternalDocs, ExternalDocs, (w, e) => e.SerializeAsV3(w)); diff --git a/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs b/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs index 9e43e3be6..bbd2a51d1 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs @@ -77,7 +77,7 @@ public OpenApiEncoding(OpenApiEncoding encoding) /// public void SerializeAsV31(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); } /// @@ -86,13 +86,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); } /// /// Serialize to Open Api v3.0. /// - public void Serialize(IOpenApiWriter writer) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -114,7 +114,7 @@ public void Serialize(IOpenApiWriter writer) writer.WriteProperty(OpenApiConstants.AllowReserved, AllowReserved, false); // extensions - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiExample.cs b/src/Microsoft.OpenApi/Models/OpenApiExample.cs index 2d11690d6..99e6311d7 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiExample.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiExample.cs @@ -79,7 +79,7 @@ public OpenApiExample(OpenApiExample example) /// public void SerializeAsV31(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); } /// @@ -88,13 +88,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); } /// /// Serialize to Open Api v3.0 /// - public void Serialize(IOpenApiWriter writer) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -112,7 +112,7 @@ public void Serialize(IOpenApiWriter writer) target = GetEffective(Reference.HostDocument); } } - target.SerializeAsV3WithoutReference(writer); + target.SerializeAsV3WithoutReference(writer, version); } /// @@ -135,7 +135,7 @@ public OpenApiExample GetEffective(OpenApiDocument doc) /// /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version) { writer.WriteStartObject(); @@ -152,7 +152,7 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer) writer.WriteProperty(OpenApiConstants.ExternalValue, ExternalValue); // extensions - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs b/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs index a5111f2b7..0e74e43e7 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs @@ -45,7 +45,7 @@ protected OpenApiExtensibleDictionary( /// public void SerializeAsV31(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); } /// @@ -54,13 +54,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); } /// /// Serialize to Open Api v3.0 /// - public void Serialize(IOpenApiWriter writer) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -71,7 +71,7 @@ public void Serialize(IOpenApiWriter writer) writer.WriteRequiredObject(item.Key, item.Value, (w, p) => p.SerializeAsV3(w)); } - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiHeader.cs b/src/Microsoft.OpenApi/Models/OpenApiHeader.cs index 9d3cf31b7..d4698ff48 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiHeader.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiHeader.cs @@ -117,7 +117,7 @@ public OpenApiHeader(OpenApiHeader header) /// public void SerializeAsV31(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); } /// @@ -125,13 +125,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); } /// /// Serialize to Open Api v3.0 /// - public void Serialize(IOpenApiWriter writer) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -149,7 +149,7 @@ public void Serialize(IOpenApiWriter writer) target = GetEffective(Reference.HostDocument); } } - target.SerializeAsV3WithoutReference(writer); + target.SerializeAsV3WithoutReference(writer, version); } @@ -174,7 +174,7 @@ public OpenApiHeader GetEffective(OpenApiDocument doc) /// /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version) { writer.WriteStartObject(); @@ -212,7 +212,7 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer) writer.WriteOptionalMap(OpenApiConstants.Content, Content, (w, c) => c.SerializeAsV3(w)); // extensions - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiInfo.cs b/src/Microsoft.OpenApi/Models/OpenApiInfo.cs index 2ca7f0426..f5a5540de 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiInfo.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiInfo.cs @@ -78,7 +78,7 @@ public OpenApiInfo(OpenApiInfo info) /// public void SerializeAsV31(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); // summary - present in 3.1 writer.WriteProperty(OpenApiConstants.Summary, Summary); @@ -90,7 +90,7 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); writer.WriteEndObject(); } @@ -98,7 +98,7 @@ public void SerializeAsV3(IOpenApiWriter writer) /// /// Serialize to Open Api v3.0 /// - public void Serialize(IOpenApiWriter writer) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); writer.WriteStartObject(); @@ -122,7 +122,7 @@ public void Serialize(IOpenApiWriter writer) writer.WriteProperty(OpenApiConstants.Version, Version); // specification extensions - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); } /// diff --git a/src/Microsoft.OpenApi/Models/OpenApiLink.cs b/src/Microsoft.OpenApi/Models/OpenApiLink.cs index f9bfadabc..1c3598220 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiLink.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiLink.cs @@ -87,7 +87,7 @@ public OpenApiLink(OpenApiLink link) /// public void SerializeAsV31(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); } /// @@ -95,13 +95,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); } /// /// Serialize /// - public void Serialize(IOpenApiWriter writer) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -119,7 +119,7 @@ public void Serialize(IOpenApiWriter writer) target = GetEffective(Reference.HostDocument); } } - target.SerializeAsV3WithoutReference(writer); + target.SerializeAsV3WithoutReference(writer, version); } /// @@ -143,7 +143,7 @@ public OpenApiLink GetEffective(OpenApiDocument doc) /// /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version) { writer.WriteStartObject(); diff --git a/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs b/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs index dec691422..cbcb8a70f 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs @@ -65,7 +65,7 @@ public OpenApiMediaType(OpenApiMediaType mediaType) /// public void SerializeAsV31(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); } /// @@ -73,13 +73,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); } /// /// Serialize to Open Api v3.0. /// - public void Serialize(IOpenApiWriter writer) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -98,7 +98,7 @@ public void Serialize(IOpenApiWriter writer) writer.WriteOptionalMap(OpenApiConstants.Encoding, Encoding, (w, e) => e.SerializeAsV3(w)); // extensions - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlow.cs b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlow.cs index e9e0a62bc..67ff239b2 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlow.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlow.cs @@ -63,7 +63,7 @@ public OpenApiOAuthFlow(OpenApiOAuthFlow oAuthFlow) /// public void SerializeAsV31(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); } /// @@ -71,13 +71,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); } /// /// Serialize to Open Api v3.0 /// - public void Serialize(IOpenApiWriter writer) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -96,7 +96,7 @@ public void Serialize(IOpenApiWriter writer) writer.WriteRequiredMap(OpenApiConstants.Scopes, Scopes, (w, s) => w.WriteValue(s)); // extensions - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs index 9f849a0c1..1b631d8d9 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs @@ -61,7 +61,7 @@ public OpenApiOAuthFlows(OpenApiOAuthFlows oAuthFlows) /// public void SerializeAsV31(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); } /// @@ -69,13 +69,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); } /// /// Serialize /// - public void Serialize(IOpenApiWriter writer) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -100,7 +100,7 @@ public void Serialize(IOpenApiWriter writer) (w, o) => o.SerializeAsV3(w)); // extensions - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs index 5ac303216..efdfd31f9 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs @@ -136,7 +136,7 @@ public OpenApiOperation(OpenApiOperation operation) /// public void SerializeAsV31(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); } /// @@ -144,13 +144,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); } /// /// Serialize to Open Api v3.0. /// - public void Serialize(IOpenApiWriter writer) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -199,7 +199,7 @@ public void Serialize(IOpenApiWriter writer) writer.WriteOptionalCollection(OpenApiConstants.Servers, Servers, (w, s) => s.SerializeAsV3(w)); // specification extensions - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions,version); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs index 0b018fdd9..45221cd8e 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs @@ -174,7 +174,7 @@ public OpenApiParameter(OpenApiParameter parameter) /// public void SerializeAsV31(IOpenApiWriter writer) { - Serialize(writer); + Serialize(writer, OpenApiSpecVersion.OpenApi3_1); } /// @@ -182,13 +182,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - Serialize(writer); + Serialize(writer, OpenApiSpecVersion.OpenApi3_0); } /// /// Serialize /// - public void Serialize(IOpenApiWriter writer) + public void Serialize(IOpenApiWriter writer, OpenApiSpecVersion version) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -207,7 +207,7 @@ public void Serialize(IOpenApiWriter writer) } } - target.SerializeAsV3WithoutReference(writer); + target.SerializeAsV3WithoutReference(writer, version); } /// @@ -230,7 +230,7 @@ public OpenApiParameter GetEffective(OpenApiDocument doc) /// /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version) { writer.WriteStartObject(); @@ -274,7 +274,7 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer) writer.WriteOptionalMap(OpenApiConstants.Content, Content, (w, c) => c.SerializeAsV3(w)); // extensions - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs b/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs index 1a156e4e3..0d1d75b89 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs @@ -90,7 +90,7 @@ public OpenApiPathItem(OpenApiPathItem pathItem) /// public void SerializeAsV31(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); } /// @@ -98,13 +98,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); } /// /// Serialize to Open Api v3.0 /// - public void Serialize(IOpenApiWriter writer) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); var target = this; @@ -121,7 +121,7 @@ public void Serialize(IOpenApiWriter writer) target = GetEffective(Reference.HostDocument); } } - target.SerializeAsV3WithoutReference(writer); + target.SerializeAsV3WithoutReference(writer, version); } /// @@ -208,7 +208,7 @@ public void SerializeAsV2WithoutReference(IOpenApiWriter writer) /// Serialize inline PathItem in OpenAPI V3 /// /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version) { writer.WriteStartObject(); @@ -235,7 +235,7 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer) writer.WriteOptionalCollection(OpenApiConstants.Parameters, Parameters, (w, p) => p.SerializeAsV3(w)); // specification extensions - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiReference.cs b/src/Microsoft.OpenApi/Models/OpenApiReference.cs index 4df154331..b9c7b933f 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiReference.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiReference.cs @@ -149,7 +149,7 @@ public OpenApiReference(OpenApiReference reference) /// public void SerializeAsV31(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer); // summary and description are in 3.1 but not in 3.0 writer.WriteProperty(OpenApiConstants.Summary, Summary); @@ -163,14 +163,14 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer); writer.WriteEndObject(); } /// /// Serialize /// - public void Serialize(IOpenApiWriter writer) + private void SerializeInternal(IOpenApiWriter writer) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); diff --git a/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs b/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs index 397bb1721..256fc2113 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs @@ -70,7 +70,7 @@ public OpenApiRequestBody(OpenApiRequestBody requestBody) /// public void SerializeAsV31(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); } /// @@ -78,13 +78,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); } /// /// Serialize to Open Api v3.0 /// - public void Serialize(IOpenApiWriter writer) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -102,7 +102,7 @@ public void Serialize(IOpenApiWriter writer) target = GetEffective(Reference.HostDocument); } } - target.SerializeAsV3WithoutReference(writer); + target.SerializeAsV3WithoutReference(writer, version); } /// @@ -125,7 +125,7 @@ public OpenApiRequestBody GetEffective(OpenApiDocument doc) /// /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version) { writer.WriteStartObject(); @@ -139,7 +139,7 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer) writer.WriteProperty(OpenApiConstants.Required, Required, false); // extensions - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiResponse.cs b/src/Microsoft.OpenApi/Models/OpenApiResponse.cs index e0c105a3e..857bf7fe6 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiResponse.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiResponse.cs @@ -75,7 +75,7 @@ public OpenApiResponse(OpenApiResponse response) /// public void SerializeAsV31(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); } /// @@ -83,13 +83,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); } /// /// Serialize /// - public void Serialize(IOpenApiWriter writer) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -107,7 +107,7 @@ public void Serialize(IOpenApiWriter writer) target = GetEffective(Reference.HostDocument); } } - target.SerializeAsV3WithoutReference(writer); + target.SerializeAsV3WithoutReference(writer, version); } /// @@ -130,7 +130,7 @@ public OpenApiResponse GetEffective(OpenApiDocument doc) /// /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version) { writer.WriteStartObject(); @@ -147,7 +147,7 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer) writer.WriteOptionalMap(OpenApiConstants.Links, Links, (w, l) => l.SerializeAsV3(w)); // extension - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs index 6dc7939ea..77b44698d 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs @@ -297,7 +297,7 @@ public OpenApiSchema(OpenApiSchema schema) /// public void SerializeAsV31(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); } /// @@ -305,13 +305,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); } /// /// Serialize to Open Api v3.0 /// - public void Serialize(IOpenApiWriter writer) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -342,7 +342,7 @@ public void Serialize(IOpenApiWriter writer) } } - target.SerializeAsV3WithoutReference(writer); + target.SerializeAsV3WithoutReference(writer, version); if (Reference != null) { @@ -353,7 +353,7 @@ public void Serialize(IOpenApiWriter writer) /// /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version) { writer.WriteStartObject(); @@ -474,7 +474,7 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer) writer.WriteProperty(OpenApiConstants.Deprecated, Deprecated, false); // extensions - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs b/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs index 69a959005..8419dc229 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs @@ -33,7 +33,7 @@ public OpenApiSecurityRequirement() /// public void SerializeAsV31(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer); } /// @@ -41,13 +41,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer); } /// /// Serialize /// - public void Serialize(IOpenApiWriter writer) + private void SerializeInternal(IOpenApiWriter writer) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); diff --git a/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs b/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs index 6618e402e..ea2660400 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs @@ -102,7 +102,7 @@ public OpenApiSecurityScheme(OpenApiSecurityScheme securityScheme) /// public void SerializeAsV31(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); } /// @@ -110,13 +110,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); } /// /// Serialize to Open Api v3.0 /// - public void Serialize(IOpenApiWriter writer) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -126,13 +126,13 @@ public void Serialize(IOpenApiWriter writer) return; } - SerializeAsV3WithoutReference(writer); + SerializeAsV3WithoutReference(writer, version); } /// /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version) { writer.WriteStartObject(); @@ -171,7 +171,7 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer) } // extensions - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiServer.cs b/src/Microsoft.OpenApi/Models/OpenApiServer.cs index d5623a5e8..ae96c25fd 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiServer.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiServer.cs @@ -57,7 +57,7 @@ public OpenApiServer(OpenApiServer server) /// public void SerializeAsV31(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); } /// @@ -65,13 +65,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); } /// /// Serialize to Open Api v3.0 /// - public void Serialize(IOpenApiWriter writer) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -87,7 +87,7 @@ public void Serialize(IOpenApiWriter writer) writer.WriteOptionalMap(OpenApiConstants.Variables, Variables, (w, v) => v.SerializeAsV3(w)); // specification extensions - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiServerVariable.cs b/src/Microsoft.OpenApi/Models/OpenApiServerVariable.cs index 9732876b3..9bd923214 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiServerVariable.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiServerVariable.cs @@ -55,7 +55,7 @@ public OpenApiServerVariable(OpenApiServerVariable serverVariable) /// public void SerializeAsV31(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); } /// @@ -63,13 +63,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); } /// /// Serialize to Open Api v3.0 /// - public void Serialize(IOpenApiWriter writer) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -85,7 +85,7 @@ public void Serialize(IOpenApiWriter writer) writer.WriteOptionalCollection(OpenApiConstants.Enum, Enum, (w, s) => w.WriteValue(s)); // specification extensions - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiTag.cs b/src/Microsoft.OpenApi/Models/OpenApiTag.cs index b17a2b052..088c6a83f 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiTag.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiTag.cs @@ -66,7 +66,7 @@ public OpenApiTag(OpenApiTag tag) /// public void SerializeAsV31(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer); } /// @@ -74,13 +74,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - Serialize(writer); + SerializeInternal(writer); } /// /// Serialize to Open Api v3.0 /// - public void Serialize(IOpenApiWriter writer) + private void SerializeInternal(IOpenApiWriter writer) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -96,7 +96,7 @@ public void Serialize(IOpenApiWriter writer) /// /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version) { writer.WriteStartObject(); @@ -110,7 +110,7 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer) writer.WriteOptionalObject(OpenApiConstants.ExternalDocs, ExternalDocs, (w, e) => e.SerializeAsV3(w)); // extensions. - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); writer.WriteEndObject(); } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs index dd2235631..7bd8aa6e3 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs @@ -60,7 +60,7 @@ public OpenApiSecurityScheme CloneSecurityScheme(OpenApiSecurityScheme element) { InlineLocalReferences = true }); - element.SerializeAsV3WithoutReference(writer); + element.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); writer.Flush(); stream.Position = 0; diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiCallbackTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiCallbackTests.cs index 9d512566f..593bdcfe7 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiCallbackTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiCallbackTests.cs @@ -151,7 +151,7 @@ public async Task SerializeReferencedCallbackAsV3JsonWithoutReferenceWorks(bool var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ReferencedCallback.SerializeAsV3WithoutReference(writer); + ReferencedCallback.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiExampleTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiExampleTests.cs index 6108c3c26..0e5197e71 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiExampleTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiExampleTests.cs @@ -152,7 +152,7 @@ public async Task SerializeReferencedExampleAsV3JsonWithoutReferenceWorks(bool p var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ReferencedExample.SerializeAsV3WithoutReference(writer); + ReferencedExample.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiHeaderTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiHeaderTests.cs index 846d470ba..6c5fa6f1f 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiHeaderTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiHeaderTests.cs @@ -94,7 +94,7 @@ public async Task SerializeReferencedHeaderAsV3JsonWithoutReferenceWorks(bool pr var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ReferencedHeader.SerializeAsV3WithoutReference(writer); + ReferencedHeader.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiLinkTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiLinkTests.cs index 4e439a2a8..7a9fc2ea8 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiLinkTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiLinkTests.cs @@ -124,7 +124,7 @@ public async Task SerializeReferencedLinkAsV3JsonWithoutReferenceWorksAsync(bool var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ReferencedLink.SerializeAsV3WithoutReference(writer); + ReferencedLink.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiParameterTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiParameterTests.cs index cfcc56d15..4fd03a6dd 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiParameterTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiParameterTests.cs @@ -316,7 +316,7 @@ public async Task SerializeReferencedParameterAsV3JsonWithoutReferenceWorksAsync var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ReferencedParameter.SerializeAsV3WithoutReference(writer); + ReferencedParameter.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); @@ -406,7 +406,7 @@ public async Task SerializeParameterWithFormStyleAndExplodeFalseWorksAsync(bool var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ParameterWithFormStyleAndExplodeFalse.SerializeAsV3WithoutReference(writer); + ParameterWithFormStyleAndExplodeFalse.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); @@ -424,7 +424,7 @@ public async Task SerializeParameterWithFormStyleAndExplodeTrueWorksAsync(bool p var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ParameterWithFormStyleAndExplodeTrue.SerializeAsV3WithoutReference(writer); + ParameterWithFormStyleAndExplodeTrue.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiRequestBodyTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiRequestBodyTests.cs index d8bdacae4..beb7833cd 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiRequestBodyTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiRequestBodyTests.cs @@ -106,7 +106,7 @@ public async Task SerializeReferencedRequestBodyAsV3JsonWithoutReferenceWorksAsy var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ReferencedRequestBody.SerializeAsV3WithoutReference(writer); + ReferencedRequestBody.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiResponseTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiResponseTests.cs index a5555ddd9..2534af737 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiResponseTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiResponseTests.cs @@ -310,7 +310,7 @@ public async Task SerializeReferencedResponseAsV3JsonWithoutReferenceWorksAsync( var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ReferencedResponse.SerializeAsV3WithoutReference(writer); + ReferencedResponse.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs index 429129c1e..c18790eab 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs @@ -379,7 +379,7 @@ public async Task SerializeReferencedSchemaAsV3WithoutReferenceJsonWorksAsync(bo // Act - ReferencedSchema.SerializeAsV3WithoutReference(writer); + ReferencedSchema.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs index 1294f0f48..0fe512a61 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs @@ -334,7 +334,7 @@ public async Task SerializeReferencedSecuritySchemeAsV3JsonWithoutReferenceWorks var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ReferencedSecurityScheme.SerializeAsV3WithoutReference(writer); + ReferencedSecurityScheme.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiTagTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiTagTests.cs index 7e837bd52..9cd5191b0 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiTagTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiTagTests.cs @@ -58,7 +58,7 @@ public async Task SerializeBasicTagAsV3JsonWithoutReferenceWorksAsync(bool produ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - BasicTag.SerializeAsV3WithoutReference(writer); + BasicTag.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); @@ -93,7 +93,7 @@ public void SerializeBasicTagAsV3YamlWithoutReferenceWorks() var expected = "{ }"; // Act - BasicTag.SerializeAsV3WithoutReference(writer); + BasicTag.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); var actual = outputStringWriter.GetStringBuilder().ToString(); // Assert @@ -131,7 +131,7 @@ public async Task SerializeAdvancedTagAsV3JsonWithoutReferenceWorksAsync(bool pr var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - AdvancedTag.SerializeAsV3WithoutReference(writer); + AdvancedTag.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); @@ -172,7 +172,7 @@ public void SerializeAdvancedTagAsV3YamlWithoutReferenceWorks() x-tag-extension: "; // Act - AdvancedTag.SerializeAsV3WithoutReference(writer); + AdvancedTag.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); From 07d66aa7036b2417d96344ea80b67b572ba41cfb Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 27 Feb 2023 11:57:35 +0300 Subject: [PATCH 13/20] Update property ordering --- test/Microsoft.OpenApi.Tests/Models/OpenApiInfoTests.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiInfoTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiInfoTests.cs index 72cd9070f..74eb2d6e9 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiInfoTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiInfoTests.cs @@ -210,9 +210,9 @@ public void SerializeInfoObjectWithSummaryAsV31YamlWorks() { // Arrange var expected = @"title: Sample Pet Store App -summary: This is a sample server for a pet store. description: This is a sample server for a pet store. -version: '1.1.1'"; +version: '1.1.1' +summary: This is a sample server for a pet store."; // Act var actual = InfoWithSummary.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_1); @@ -229,9 +229,9 @@ public void SerializeInfoObjectWithSummaryAsV31JsonWorks() // Arrange var expected = @"{ ""title"": ""Sample Pet Store App"", - ""summary"": ""This is a sample server for a pet store."", ""description"": ""This is a sample server for a pet store."", - ""version"": ""1.1.1"" + ""version"": ""1.1.1"", + ""summary"": ""This is a sample server for a pet store."" }"; // Act From 2baa14cff03ae6541200785f44d100a8ac1bff12 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 28 Feb 2023 17:10:34 +0300 Subject: [PATCH 14/20] Use a callback to explicitly call the Serialize methods --- .../OpenApiSerializableExtensions.cs | 2 + .../Interfaces/IOpenApiReferenceable.cs | 3 +- .../Models/OpenApiCallback.cs | 17 +++---- .../Models/OpenApiComponents.cs | 47 ++++++++++--------- .../Models/OpenApiDocument.cs | 24 +++++----- .../Models/OpenApiEncoding.cs | 9 ++-- .../Models/OpenApiExample.cs | 13 ++--- .../Models/OpenApiExtensibleDictionary.cs | 9 ++-- src/Microsoft.OpenApi/Models/OpenApiHeader.cs | 19 ++++---- src/Microsoft.OpenApi/Models/OpenApiInfo.cs | 11 +++-- src/Microsoft.OpenApi/Models/OpenApiLink.cs | 15 +++--- .../Models/OpenApiMediaType.cs | 26 +++++----- .../Models/OpenApiOAuthFlows.cs | 15 +++--- .../Models/OpenApiOperation.cs | 23 ++++----- .../Models/OpenApiParameter.cs | 19 ++++---- .../Models/OpenApiPathItem.cs | 21 +++++---- .../Models/OpenApiReference.cs | 4 +- .../Models/OpenApiRequestBody.cs | 15 +++--- .../Models/OpenApiResponse.cs | 19 ++++---- src/Microsoft.OpenApi/Models/OpenApiSchema.cs | 33 ++++++------- .../Models/OpenApiSecurityRequirement.cs | 9 ++-- .../Models/OpenApiSecurityScheme.cs | 15 +++--- src/Microsoft.OpenApi/Models/OpenApiServer.cs | 9 ++-- src/Microsoft.OpenApi/Models/OpenApiTag.cs | 13 ++--- .../V3Tests/OpenApiDocumentTests.cs | 2 +- .../Models/OpenApiCallbackTests.cs | 2 +- .../Models/OpenApiExampleTests.cs | 2 +- .../Models/OpenApiHeaderTests.cs | 2 +- .../Models/OpenApiLinkTests.cs | 2 +- .../Models/OpenApiParameterTests.cs | 6 +-- .../Models/OpenApiRequestBodyTests.cs | 2 +- .../Models/OpenApiResponseTests.cs | 2 +- .../Models/OpenApiSchemaTests.cs | 2 +- .../Models/OpenApiSecurityRequirementTests.cs | 3 +- .../Models/OpenApiSecuritySchemeTests.cs | 2 +- .../Models/OpenApiTagTests.cs | 8 ++-- 36 files changed, 226 insertions(+), 199 deletions(-) diff --git a/src/Microsoft.OpenApi/Extensions/OpenApiSerializableExtensions.cs b/src/Microsoft.OpenApi/Extensions/OpenApiSerializableExtensions.cs index 6489c0fc0..9c4300c6b 100755 --- a/src/Microsoft.OpenApi/Extensions/OpenApiSerializableExtensions.cs +++ b/src/Microsoft.OpenApi/Extensions/OpenApiSerializableExtensions.cs @@ -15,6 +15,8 @@ namespace Microsoft.OpenApi.Extensions /// public static class OpenApiSerializableExtensions { + public delegate void SerializeDelegate(IOpenApiWriter writer, IOpenApiSerializable element); + /// /// Serialize the to the Open API document (JSON) using the given stream and specification version. /// diff --git a/src/Microsoft.OpenApi/Interfaces/IOpenApiReferenceable.cs b/src/Microsoft.OpenApi/Interfaces/IOpenApiReferenceable.cs index 53d4144e0..b11de7671 100644 --- a/src/Microsoft.OpenApi/Interfaces/IOpenApiReferenceable.cs +++ b/src/Microsoft.OpenApi/Interfaces/IOpenApiReferenceable.cs @@ -3,6 +3,7 @@ using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Writers; +using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions; namespace Microsoft.OpenApi.Interfaces { @@ -25,7 +26,7 @@ public interface IOpenApiReferenceable : IOpenApiSerializable /// /// Serialize to OpenAPI V3 document without using reference. /// - void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version); + void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback); /// /// Serialize to OpenAPI V2 document without using reference. diff --git a/src/Microsoft.OpenApi/Models/OpenApiCallback.cs b/src/Microsoft.OpenApi/Models/OpenApiCallback.cs index dc4e2720c..33f153465 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiCallback.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiCallback.cs @@ -2,10 +2,10 @@ // Licensed under the MIT license. using System.Collections.Generic; -using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Expressions; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; +using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions; namespace Microsoft.OpenApi.Models { @@ -83,7 +83,7 @@ public void AddPathItem(RuntimeExpression expression, OpenApiPathItem pathItem) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV3(writer)); } /// @@ -91,7 +91,7 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); } /// @@ -99,7 +99,8 @@ public void SerializeAsV3(IOpenApiWriter writer) /// /// /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) + /// + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -109,7 +110,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version { if (!writer.GetSettings().ShouldInlineReference(Reference)) { - Reference.SerializeAsV3(writer); + callback(writer, Reference); return; } else @@ -117,7 +118,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version target = GetEffective(Reference.HostDocument); } } - target.SerializeAsV3WithoutReference(writer, version); + target.SerializeAsV3WithoutReference(writer, version, callback); } /// @@ -142,14 +143,14 @@ public OpenApiCallback GetEffective(OpenApiDocument doc) /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer.WriteStartObject(); // path items foreach (var item in PathItems) { - writer.WriteRequiredObject(item.Key.Expression, item.Value, (w, p) => p.SerializeAsV3(w)); + writer.WriteRequiredObject(item.Key.Expression, item.Value, (w, p) => callback(w, p)); } // extensions diff --git a/src/Microsoft.OpenApi/Models/OpenApiComponents.cs b/src/Microsoft.OpenApi/Models/OpenApiComponents.cs index 8b46ded38..3004cdae8 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiComponents.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiComponents.cs @@ -6,6 +6,7 @@ using System.Linq; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; +using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions; namespace Microsoft.OpenApi.Models { @@ -101,7 +102,7 @@ public OpenApiComponents(OpenApiComponents components) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV3(writer)); // pathItems - only present in v3.1 writer.WriteOptionalMap( @@ -113,7 +114,7 @@ public void SerializeAsV31(IOpenApiWriter writer) component.Reference.Type == ReferenceType.Schema && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w, OpenApiSpecVersion.OpenApi3_1); + component.SerializeAsV3WithoutReference(w, OpenApiSpecVersion.OpenApi3_1, callback: (w, e) => e.SerializeAsV3(w)); } else { @@ -130,14 +131,14 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); writer.WriteEndObject(); } /// /// Serialize . /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -156,7 +157,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version OpenApiConstants.Schemas, Schemas, (w, key, component) => { - component.SerializeAsV3WithoutReference(w, version); + component.SerializeAsV3WithoutReference(w, version, callback); }); } writer.WriteEndObject(); @@ -178,11 +179,11 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version component.Reference.Type == ReferenceType.Schema && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w, version); + component.SerializeAsV3WithoutReference(w, version, callback); } else { - component.SerializeAsV3(w); + callback(w, component); } }); @@ -196,11 +197,11 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version component.Reference.Type == ReferenceType.Response && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w, version); + component.SerializeAsV3WithoutReference(w, version, callback); } else { - component.SerializeAsV3(w); + callback(w, component); } }); @@ -214,11 +215,11 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version component.Reference.Type == ReferenceType.Parameter && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w, version); + component.SerializeAsV3WithoutReference(w, version, callback); } else { - component.SerializeAsV3(w); + callback(w, component); } }); @@ -232,11 +233,11 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version component.Reference.Type == ReferenceType.Example && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w, version); + component.SerializeAsV3WithoutReference(w, version, callback); } else { - component.SerializeAsV3(w); + callback(w, component); } }); @@ -250,11 +251,11 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version component.Reference.Type == ReferenceType.RequestBody && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w, version); + component.SerializeAsV3WithoutReference(w, version, callback); } else { - component.SerializeAsV3(w); + callback(w, component); } }); @@ -268,11 +269,11 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version component.Reference.Type == ReferenceType.Header && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w, version); + component.SerializeAsV3WithoutReference(w, version, callback); } else { - component.SerializeAsV3(w); + callback(w, component); } }); @@ -286,11 +287,11 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version component.Reference.Type == ReferenceType.SecurityScheme && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w, version); + component.SerializeAsV3WithoutReference(w, version, callback); } else { - component.SerializeAsV3(w); + callback(w, component); } }); @@ -304,11 +305,11 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version component.Reference.Type == ReferenceType.Link && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w, version); + component.SerializeAsV3WithoutReference(w, version, callback); } else { - component.SerializeAsV3(w); + callback(w, component); } }); @@ -322,11 +323,11 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version component.Reference.Type == ReferenceType.Callback && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w, version); + component.SerializeAsV3WithoutReference(w, version, callback); } else { - component.SerializeAsV3(w); + callback(w, component); } }); diff --git a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs index 148852522..5f4eb0a6a 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs @@ -11,6 +11,7 @@ using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Services; using Microsoft.OpenApi.Writers; +using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions; namespace Microsoft.OpenApi.Models { @@ -121,7 +122,7 @@ public void SerializeAsV31(IOpenApiWriter writer) // jsonSchemaDialect writer.WriteProperty(OpenApiConstants.JsonSchemaDialect, JsonSchemaDialect); - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (w, element) => element.SerializeAsV31(w)); // webhooks writer.WriteOptionalMap( @@ -133,7 +134,7 @@ public void SerializeAsV31(IOpenApiWriter writer) component.Reference.Type == ReferenceType.PathItem && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w, OpenApiSpecVersion.OpenApi3_1); + component.SerializeAsV3WithoutReference(w, OpenApiSpecVersion.OpenApi3_1, callback: (w, e) => e.SerializeAsV3(w)); } else { @@ -156,7 +157,7 @@ public void SerializeAsV3(IOpenApiWriter writer) // openapi writer.WriteProperty(OpenApiConstants.OpenApi, "3.0.1"); - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (w, element) => element.SerializeAsV3(w)); writer.WriteEndObject(); } @@ -165,31 +166,32 @@ public void SerializeAsV3(IOpenApiWriter writer) /// /// /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) + /// + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { // info - writer.WriteRequiredObject(OpenApiConstants.Info, Info, (w, i) => i.SerializeAsV3(w)); + writer.WriteRequiredObject(OpenApiConstants.Info, Info, (w, i) => callback(w, i)); // servers - writer.WriteOptionalCollection(OpenApiConstants.Servers, Servers, (w, s) => s.SerializeAsV3(w)); + writer.WriteOptionalCollection(OpenApiConstants.Servers, Servers, (w, s) => callback(w, s)); // paths - writer.WriteRequiredObject(OpenApiConstants.Paths, Paths, (w, p) => p.SerializeAsV3(w)); + writer.WriteRequiredObject(OpenApiConstants.Paths, Paths, (w, p) => callback(w, p)); // components - writer.WriteOptionalObject(OpenApiConstants.Components, Components, (w, c) => c.SerializeAsV3(w)); + writer.WriteOptionalObject(OpenApiConstants.Components, Components, (w, c) => callback(w, c)); // security writer.WriteOptionalCollection( OpenApiConstants.Security, SecurityRequirements, - (w, s) => s.SerializeAsV3(w)); + (w, s) => callback(w, s)); // tags - writer.WriteOptionalCollection(OpenApiConstants.Tags, Tags, (w, t) => t.SerializeAsV3WithoutReference(w, version)); + writer.WriteOptionalCollection(OpenApiConstants.Tags, Tags, (w, t) => t.SerializeAsV3WithoutReference(w, version, callback)); // external docs - writer.WriteOptionalObject(OpenApiConstants.ExternalDocs, ExternalDocs, (w, e) => e.SerializeAsV3(w)); + writer.WriteOptionalObject(OpenApiConstants.ExternalDocs, ExternalDocs, (w, e) => callback(w, e)); // extensions writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); diff --git a/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs b/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs index bbd2a51d1..1965335fe 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs @@ -6,6 +6,7 @@ using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; +using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions; namespace Microsoft.OpenApi.Models { @@ -77,7 +78,7 @@ public OpenApiEncoding(OpenApiEncoding encoding) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer)); } /// @@ -86,13 +87,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); } /// /// Serialize to Open Api v3.0. /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -102,7 +103,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version writer.WriteProperty(OpenApiConstants.ContentType, ContentType); // headers - writer.WriteOptionalMap(OpenApiConstants.Headers, Headers, (w, h) => h.SerializeAsV3(w)); + writer.WriteOptionalMap(OpenApiConstants.Headers, Headers, (w, h) => callback(w, h)); // style writer.WriteProperty(OpenApiConstants.Style, Style?.GetDisplayName()); diff --git a/src/Microsoft.OpenApi/Models/OpenApiExample.cs b/src/Microsoft.OpenApi/Models/OpenApiExample.cs index 99e6311d7..b870b02f1 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiExample.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiExample.cs @@ -5,6 +5,7 @@ using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; +using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions; namespace Microsoft.OpenApi.Models { @@ -79,7 +80,7 @@ public OpenApiExample(OpenApiExample example) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer)); } /// @@ -88,13 +89,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); } /// /// Serialize to Open Api v3.0 /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -104,7 +105,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version { if (!writer.GetSettings().ShouldInlineReference(Reference)) { - Reference.SerializeAsV3(writer); + callback(writer, Reference); return; } else @@ -112,7 +113,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version target = GetEffective(Reference.HostDocument); } } - target.SerializeAsV3WithoutReference(writer, version); + target.SerializeAsV3WithoutReference(writer, version, callback); } /// @@ -135,7 +136,7 @@ public OpenApiExample GetEffective(OpenApiDocument doc) /// /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer.WriteStartObject(); diff --git a/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs b/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs index 0e74e43e7..1e6d9ec5f 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; +using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions; namespace Microsoft.OpenApi.Models { @@ -45,7 +46,7 @@ protected OpenApiExtensibleDictionary( /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer)); } /// @@ -54,13 +55,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); } /// /// Serialize to Open Api v3.0 /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -68,7 +69,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version foreach (var item in this) { - writer.WriteRequiredObject(item.Key, item.Value, (w, p) => p.SerializeAsV3(w)); + writer.WriteRequiredObject(item.Key, item.Value, (w, p) => callback(w, p)); } writer.WriteExtensions(Extensions, version); diff --git a/src/Microsoft.OpenApi/Models/OpenApiHeader.cs b/src/Microsoft.OpenApi/Models/OpenApiHeader.cs index d4698ff48..4af26d47c 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiHeader.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiHeader.cs @@ -6,6 +6,7 @@ using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; +using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions; namespace Microsoft.OpenApi.Models { @@ -117,7 +118,7 @@ public OpenApiHeader(OpenApiHeader header) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer)); } /// @@ -125,13 +126,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); } /// /// Serialize to Open Api v3.0 /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -141,7 +142,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version { if (!writer.GetSettings().ShouldInlineReference(Reference)) { - Reference.SerializeAsV3(writer); + callback(writer, Reference); return; } else @@ -149,7 +150,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version target = GetEffective(Reference.HostDocument); } } - target.SerializeAsV3WithoutReference(writer, version); + target.SerializeAsV3WithoutReference(writer, version, callback); } @@ -174,7 +175,7 @@ public OpenApiHeader GetEffective(OpenApiDocument doc) /// /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer.WriteStartObject(); @@ -200,16 +201,16 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVers writer.WriteProperty(OpenApiConstants.AllowReserved, AllowReserved, false); // schema - writer.WriteOptionalObject(OpenApiConstants.Schema, Schema, (w, s) => s.SerializeAsV3(w)); + writer.WriteOptionalObject(OpenApiConstants.Schema, Schema, (w, s) => callback(w, s)); // example writer.WriteOptionalObject(OpenApiConstants.Example, Example, (w, s) => w.WriteAny(s)); // examples - writer.WriteOptionalMap(OpenApiConstants.Examples, Examples, (w, e) => e.SerializeAsV3(w)); + writer.WriteOptionalMap(OpenApiConstants.Examples, Examples, (w, e) => callback(w, e)); // content - writer.WriteOptionalMap(OpenApiConstants.Content, Content, (w, c) => c.SerializeAsV3(w)); + writer.WriteOptionalMap(OpenApiConstants.Content, Content, (w, c) => callback(w, c)); // extensions writer.WriteExtensions(Extensions, version); diff --git a/src/Microsoft.OpenApi/Models/OpenApiInfo.cs b/src/Microsoft.OpenApi/Models/OpenApiInfo.cs index f5a5540de..02b3eb1da 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiInfo.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiInfo.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; +using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions; namespace Microsoft.OpenApi.Models { @@ -78,7 +79,7 @@ public OpenApiInfo(OpenApiInfo info) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer)); // summary - present in 3.1 writer.WriteProperty(OpenApiConstants.Summary, Summary); @@ -90,7 +91,7 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); writer.WriteEndObject(); } @@ -98,7 +99,7 @@ public void SerializeAsV3(IOpenApiWriter writer) /// /// Serialize to Open Api v3.0 /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); writer.WriteStartObject(); @@ -113,10 +114,10 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version writer.WriteProperty(OpenApiConstants.TermsOfService, TermsOfService?.OriginalString); // contact object - writer.WriteOptionalObject(OpenApiConstants.Contact, Contact, (w, c) => c.SerializeAsV3(w)); + writer.WriteOptionalObject(OpenApiConstants.Contact, Contact, (w, c) => callback(w, c)); // license object - writer.WriteOptionalObject(OpenApiConstants.License, License, (w, l) => l.SerializeAsV3(w)); + writer.WriteOptionalObject(OpenApiConstants.License, License, (w, l) => callback(w, l)); // version writer.WriteProperty(OpenApiConstants.Version, Version); diff --git a/src/Microsoft.OpenApi/Models/OpenApiLink.cs b/src/Microsoft.OpenApi/Models/OpenApiLink.cs index 1c3598220..2e0981d87 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiLink.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiLink.cs @@ -5,6 +5,7 @@ using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; +using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions; namespace Microsoft.OpenApi.Models { @@ -87,7 +88,7 @@ public OpenApiLink(OpenApiLink link) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer)); } /// @@ -95,13 +96,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); } /// /// Serialize /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -111,7 +112,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version { if (!writer.GetSettings().ShouldInlineReference(Reference)) { - Reference.SerializeAsV3(writer); + callback(writer, Reference); return; } else @@ -119,7 +120,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version target = GetEffective(Reference.HostDocument); } } - target.SerializeAsV3WithoutReference(writer, version); + target.SerializeAsV3WithoutReference(writer, version, callback); } /// @@ -143,7 +144,7 @@ public OpenApiLink GetEffective(OpenApiDocument doc) /// /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer.WriteStartObject(); @@ -163,7 +164,7 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVers writer.WriteProperty(OpenApiConstants.Description, Description); // server - writer.WriteOptionalObject(OpenApiConstants.Server, Server, (w, s) => s.SerializeAsV3(w)); + writer.WriteOptionalObject(OpenApiConstants.Server, Server, (w, s) => callback(w, s)); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs b/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs index cbcb8a70f..03324479e 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs @@ -1,10 +1,12 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; using System.Collections.Generic; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; +using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions; namespace Microsoft.OpenApi.Models { @@ -46,7 +48,7 @@ public class OpenApiMediaType : IOpenApiSerializable, IOpenApiExtensible /// /// Parameterless constructor /// - public OpenApiMediaType() {} + public OpenApiMediaType() { } /// /// Initializes a copy of an object @@ -65,7 +67,7 @@ public OpenApiMediaType(OpenApiMediaType mediaType) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (w, element) => element.SerializeAsV31(w)); } /// @@ -73,33 +75,33 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); - } - + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (w, element) => element.SerializeAsV3(w)); + } + /// /// Serialize to Open Api v3.0. /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); - + writer.WriteStartObject(); - + // schema - writer.WriteOptionalObject(OpenApiConstants.Schema, Schema, (w, s) => s.SerializeAsV3(w)); + writer.WriteOptionalObject(OpenApiConstants.Schema, Schema, (w, s) => callback(w, s)); // example writer.WriteOptionalObject(OpenApiConstants.Example, Example, (w, e) => w.WriteAny(e)); // examples - writer.WriteOptionalMap(OpenApiConstants.Examples, Examples, (w, e) => e.SerializeAsV3(w)); + writer.WriteOptionalMap(OpenApiConstants.Examples, Examples, (w, e) => callback(w, e)); // encoding - writer.WriteOptionalMap(OpenApiConstants.Encoding, Encoding, (w, e) => e.SerializeAsV3(w)); + writer.WriteOptionalMap(OpenApiConstants.Encoding, Encoding, (w, e) => callback(w, e)); // extensions writer.WriteExtensions(Extensions, version); - + writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs index 1b631d8d9..0d2a384f9 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs @@ -5,6 +5,7 @@ using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; +using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions; namespace Microsoft.OpenApi.Models { @@ -61,7 +62,7 @@ public OpenApiOAuthFlows(OpenApiOAuthFlows oAuthFlows) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer)); } /// @@ -69,35 +70,35 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); } /// /// Serialize /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); writer.WriteStartObject(); // implicit - writer.WriteOptionalObject(OpenApiConstants.Implicit, Implicit, (w, o) => o.SerializeAsV3(w)); + writer.WriteOptionalObject(OpenApiConstants.Implicit, Implicit, (w, o) => callback(w, o)); // password - writer.WriteOptionalObject(OpenApiConstants.Password, Password, (w, o) => o.SerializeAsV3(w)); + writer.WriteOptionalObject(OpenApiConstants.Password, Password, (w, o) => callback(w, o)); // clientCredentials writer.WriteOptionalObject( OpenApiConstants.ClientCredentials, ClientCredentials, - (w, o) => o.SerializeAsV3(w)); + (w, o) => callback(w, o)); // authorizationCode writer.WriteOptionalObject( OpenApiConstants.AuthorizationCode, AuthorizationCode, - (w, o) => o.SerializeAsV3(w)); + (w, o) => callback(w, o)); // extensions writer.WriteExtensions(Extensions, version); diff --git a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs index efdfd31f9..2a19a6aad 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs @@ -7,6 +7,7 @@ using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; +using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions; namespace Microsoft.OpenApi.Models { @@ -136,7 +137,7 @@ public OpenApiOperation(OpenApiOperation operation) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer)); } /// @@ -144,13 +145,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); } /// /// Serialize to Open Api v3.0. /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -162,7 +163,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version Tags, (w, t) => { - t.SerializeAsV3(w); + callback(w, t); }); // summary @@ -172,31 +173,31 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version writer.WriteProperty(OpenApiConstants.Description, Description); // externalDocs - writer.WriteOptionalObject(OpenApiConstants.ExternalDocs, ExternalDocs, (w, e) => e.SerializeAsV3(w)); + writer.WriteOptionalObject(OpenApiConstants.ExternalDocs, ExternalDocs, (w, e) => callback(w, e)); // operationId writer.WriteProperty(OpenApiConstants.OperationId, OperationId); // parameters - writer.WriteOptionalCollection(OpenApiConstants.Parameters, Parameters, (w, p) => p.SerializeAsV3(w)); + writer.WriteOptionalCollection(OpenApiConstants.Parameters, Parameters, (w, p) => callback(w, p)); // requestBody - writer.WriteOptionalObject(OpenApiConstants.RequestBody, RequestBody, (w, r) => r.SerializeAsV3(w)); + writer.WriteOptionalObject(OpenApiConstants.RequestBody, RequestBody, (w, r) => callback(w, r)); // responses - writer.WriteRequiredObject(OpenApiConstants.Responses, Responses, (w, r) => r.SerializeAsV3(w)); + writer.WriteRequiredObject(OpenApiConstants.Responses, Responses, (w, r) => callback(w, r)); // callbacks - writer.WriteOptionalMap(OpenApiConstants.Callbacks, Callbacks, (w, c) => c.SerializeAsV3(w)); + writer.WriteOptionalMap(OpenApiConstants.Callbacks, Callbacks, (w, c) => callback(w, c)); // deprecated writer.WriteProperty(OpenApiConstants.Deprecated, Deprecated, false); // security - writer.WriteOptionalCollection(OpenApiConstants.Security, Security, (w, s) => s.SerializeAsV3(w)); + writer.WriteOptionalCollection(OpenApiConstants.Security, Security, (w, s) => callback(w, s)); // servers - writer.WriteOptionalCollection(OpenApiConstants.Servers, Servers, (w, s) => s.SerializeAsV3(w)); + writer.WriteOptionalCollection(OpenApiConstants.Servers, Servers, (w, s) => callback(w, s)); // specification extensions writer.WriteExtensions(Extensions,version); diff --git a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs index 45221cd8e..0d6658238 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs @@ -7,6 +7,7 @@ using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; +using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions; namespace Microsoft.OpenApi.Models { @@ -174,7 +175,7 @@ public OpenApiParameter(OpenApiParameter parameter) /// public void SerializeAsV31(IOpenApiWriter writer) { - Serialize(writer, OpenApiSpecVersion.OpenApi3_1); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer)); } /// @@ -182,13 +183,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - Serialize(writer, OpenApiSpecVersion.OpenApi3_0); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); } /// /// Serialize /// - public void Serialize(IOpenApiWriter writer, OpenApiSpecVersion version) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -198,7 +199,7 @@ public void Serialize(IOpenApiWriter writer, OpenApiSpecVersion version) { if (!writer.GetSettings().ShouldInlineReference(Reference)) { - Reference.SerializeAsV3(writer); + callback(writer, Reference); return; } else @@ -207,7 +208,7 @@ public void Serialize(IOpenApiWriter writer, OpenApiSpecVersion version) } } - target.SerializeAsV3WithoutReference(writer, version); + target.SerializeAsV3WithoutReference(writer, version, callback); } /// @@ -230,7 +231,7 @@ public OpenApiParameter GetEffective(OpenApiDocument doc) /// /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer.WriteStartObject(); @@ -262,16 +263,16 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVers writer.WriteProperty(OpenApiConstants.AllowReserved, AllowReserved, false); // schema - writer.WriteOptionalObject(OpenApiConstants.Schema, Schema, (w, s) => s.SerializeAsV3(w)); + writer.WriteOptionalObject(OpenApiConstants.Schema, Schema, (w, s) => callback(w, s)); // example writer.WriteOptionalObject(OpenApiConstants.Example, Example, (w, s) => w.WriteAny(s)); // examples - writer.WriteOptionalMap(OpenApiConstants.Examples, Examples, (w, e) => e.SerializeAsV3(w)); + writer.WriteOptionalMap(OpenApiConstants.Examples, Examples, (w, e) => callback(w, e)); // content - writer.WriteOptionalMap(OpenApiConstants.Content, Content, (w, c) => c.SerializeAsV3(w)); + writer.WriteOptionalMap(OpenApiConstants.Content, Content, (w, c) => callback(w, c)); // extensions writer.WriteExtensions(Extensions, version); diff --git a/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs b/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs index 0d1d75b89..484306c01 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs @@ -5,6 +5,7 @@ using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; +using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions; namespace Microsoft.OpenApi.Models { @@ -90,7 +91,7 @@ public OpenApiPathItem(OpenApiPathItem pathItem) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer)); } /// @@ -98,13 +99,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); } /// /// Serialize to Open Api v3.0 /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); var target = this; @@ -113,7 +114,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version { if (!writer.GetSettings().ShouldInlineReference(Reference)) { - Reference.SerializeAsV3(writer); + callback(writer, Reference); return; } else @@ -121,7 +122,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version target = GetEffective(Reference.HostDocument); } } - target.SerializeAsV3WithoutReference(writer, version); + target.SerializeAsV3WithoutReference(writer, version, callback); } /// @@ -208,7 +209,9 @@ public void SerializeAsV2WithoutReference(IOpenApiWriter writer) /// Serialize inline PathItem in OpenAPI V3 /// /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version) + /// + /// + public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer.WriteStartObject(); @@ -225,14 +228,14 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVers writer.WriteOptionalObject( operation.Key.GetDisplayName(), operation.Value, - (w, o) => o.SerializeAsV3(w)); + (w, o) => callback(w, o)); } // servers - writer.WriteOptionalCollection(OpenApiConstants.Servers, Servers, (w, s) => s.SerializeAsV3(w)); + writer.WriteOptionalCollection(OpenApiConstants.Servers, Servers, (w, s) => callback(w, s)); // parameters - writer.WriteOptionalCollection(OpenApiConstants.Parameters, Parameters, (w, p) => p.SerializeAsV3(w)); + writer.WriteOptionalCollection(OpenApiConstants.Parameters, Parameters, (w, p) => callback(w, p)); // specification extensions writer.WriteExtensions(Extensions, version); diff --git a/src/Microsoft.OpenApi/Models/OpenApiReference.cs b/src/Microsoft.OpenApi/Models/OpenApiReference.cs index b9c7b933f..ecfa5c0df 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiReference.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiReference.cs @@ -154,7 +154,7 @@ public void SerializeAsV31(IOpenApiWriter writer) // summary and description are in 3.1 but not in 3.0 writer.WriteProperty(OpenApiConstants.Summary, Summary); writer.WriteProperty(OpenApiConstants.Description, Description); - + writer.WriteEndObject(); } @@ -188,7 +188,7 @@ private void SerializeInternal(IOpenApiWriter writer) return; } - writer.WriteStartObject(); + writer.WriteStartObject(); // $ref writer.WriteProperty(OpenApiConstants.DollarRef, ReferenceV3); diff --git a/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs b/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs index 256fc2113..525d6cd40 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs @@ -7,6 +7,7 @@ using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; +using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions; namespace Microsoft.OpenApi.Models { @@ -70,7 +71,7 @@ public OpenApiRequestBody(OpenApiRequestBody requestBody) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer)); } /// @@ -78,13 +79,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); } /// /// Serialize to Open Api v3.0 /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -94,7 +95,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version { if (!writer.GetSettings().ShouldInlineReference(Reference)) { - Reference.SerializeAsV3(writer); + callback(writer, Reference); return; } else @@ -102,7 +103,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version target = GetEffective(Reference.HostDocument); } } - target.SerializeAsV3WithoutReference(writer, version); + target.SerializeAsV3WithoutReference(writer, version, callback); } /// @@ -125,7 +126,7 @@ public OpenApiRequestBody GetEffective(OpenApiDocument doc) /// /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer.WriteStartObject(); @@ -133,7 +134,7 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVers writer.WriteProperty(OpenApiConstants.Description, Description); // content - writer.WriteRequiredMap(OpenApiConstants.Content, Content, (w, c) => c.SerializeAsV3(w)); + writer.WriteRequiredMap(OpenApiConstants.Content, Content, (w, c) => callback(w, c)); // required writer.WriteProperty(OpenApiConstants.Required, Required, false); diff --git a/src/Microsoft.OpenApi/Models/OpenApiResponse.cs b/src/Microsoft.OpenApi/Models/OpenApiResponse.cs index 857bf7fe6..16d727115 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiResponse.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiResponse.cs @@ -5,6 +5,7 @@ using System.Linq; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; +using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions; namespace Microsoft.OpenApi.Models { @@ -75,7 +76,7 @@ public OpenApiResponse(OpenApiResponse response) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer)); } /// @@ -83,13 +84,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); } /// /// Serialize /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -99,7 +100,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version { if (!writer.GetSettings().ShouldInlineReference(Reference)) { - Reference.SerializeAsV3(writer); + callback(writer, Reference); return; } else @@ -107,7 +108,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version target = GetEffective(Reference.HostDocument); } } - target.SerializeAsV3WithoutReference(writer, version); + target.SerializeAsV3WithoutReference(writer, version, callback); } /// @@ -130,7 +131,7 @@ public OpenApiResponse GetEffective(OpenApiDocument doc) /// /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer.WriteStartObject(); @@ -138,13 +139,13 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVers writer.WriteRequiredProperty(OpenApiConstants.Description, Description); // headers - writer.WriteOptionalMap(OpenApiConstants.Headers, Headers, (w, h) => h.SerializeAsV3(w)); + writer.WriteOptionalMap(OpenApiConstants.Headers, Headers, (w, h) => callback(w, h)); // content - writer.WriteOptionalMap(OpenApiConstants.Content, Content, (w, c) => c.SerializeAsV3(w)); + writer.WriteOptionalMap(OpenApiConstants.Content, Content, (w, c) => callback(w, c)); // links - writer.WriteOptionalMap(OpenApiConstants.Links, Links, (w, l) => l.SerializeAsV3(w)); + writer.WriteOptionalMap(OpenApiConstants.Links, Links, (w, l) => callback(w, l)); // extension writer.WriteExtensions(Extensions, version); diff --git a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs index 77b44698d..b5918b7a9 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs @@ -6,6 +6,7 @@ using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; +using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions; namespace Microsoft.OpenApi.Models { @@ -297,7 +298,7 @@ public OpenApiSchema(OpenApiSchema schema) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer)); } /// @@ -305,13 +306,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); } /// /// Serialize to Open Api v3.0 /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -322,7 +323,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version { if (!settings.ShouldInlineReference(Reference)) { - Reference.SerializeAsV3(writer); + callback(writer, Reference); return; } else @@ -337,12 +338,12 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version if (!settings.LoopDetector.PushLoop(this)) { settings.LoopDetector.SaveLoop(this); - Reference.SerializeAsV3(writer); + callback(writer, Reference); return; } } - target.SerializeAsV3WithoutReference(writer, version); + target.SerializeAsV3WithoutReference(writer, version, callback); if (Reference != null) { @@ -353,7 +354,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version /// /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer.WriteStartObject(); @@ -410,22 +411,22 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVers writer.WriteProperty(OpenApiConstants.Type, Type); // allOf - writer.WriteOptionalCollection(OpenApiConstants.AllOf, AllOf, (w, s) => s.SerializeAsV3(w)); + writer.WriteOptionalCollection(OpenApiConstants.AllOf, AllOf, (w, s) => callback(w, s)); // anyOf - writer.WriteOptionalCollection(OpenApiConstants.AnyOf, AnyOf, (w, s) => s.SerializeAsV3(w)); + writer.WriteOptionalCollection(OpenApiConstants.AnyOf, AnyOf, (w, s) => callback(w, s)); // oneOf - writer.WriteOptionalCollection(OpenApiConstants.OneOf, OneOf, (w, s) => s.SerializeAsV3(w)); + writer.WriteOptionalCollection(OpenApiConstants.OneOf, OneOf, (w, s) => callback(w, s)); // not - writer.WriteOptionalObject(OpenApiConstants.Not, Not, (w, s) => s.SerializeAsV3(w)); + writer.WriteOptionalObject(OpenApiConstants.Not, Not, (w, s) => callback(w, s)); // items - writer.WriteOptionalObject(OpenApiConstants.Items, Items, (w, s) => s.SerializeAsV3(w)); + writer.WriteOptionalObject(OpenApiConstants.Items, Items, (w, s) => callback(w, s)); // properties - writer.WriteOptionalMap(OpenApiConstants.Properties, Properties, (w, s) => s.SerializeAsV3(w)); + writer.WriteOptionalMap(OpenApiConstants.Properties, Properties, (w, s) => callback(w, s)); // additionalProperties if (AdditionalPropertiesAllowed) @@ -433,7 +434,7 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVers writer.WriteOptionalObject( OpenApiConstants.AdditionalProperties, AdditionalProperties, - (w, s) => s.SerializeAsV3(w)); + (w, s) => callback(w, s)); } else { @@ -453,7 +454,7 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVers writer.WriteProperty(OpenApiConstants.Nullable, Nullable, false); // discriminator - writer.WriteOptionalObject(OpenApiConstants.Discriminator, Discriminator, (w, s) => s.SerializeAsV3(w)); + writer.WriteOptionalObject(OpenApiConstants.Discriminator, Discriminator, (w, s) => callback(w, s)); // readOnly writer.WriteProperty(OpenApiConstants.ReadOnly, ReadOnly, false); @@ -465,7 +466,7 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVers writer.WriteOptionalObject(OpenApiConstants.Xml, Xml, (w, s) => s.SerializeAsV2(w)); // externalDocs - writer.WriteOptionalObject(OpenApiConstants.ExternalDocs, ExternalDocs, (w, s) => s.SerializeAsV3(w)); + writer.WriteOptionalObject(OpenApiConstants.ExternalDocs, ExternalDocs, (w, s) => callback(w, s)); // example writer.WriteOptionalObject(OpenApiConstants.Example, Example, (w, e) => w.WriteAny(e)); diff --git a/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs b/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs index 8419dc229..ed1df0a84 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; +using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions; namespace Microsoft.OpenApi.Models { @@ -33,7 +34,7 @@ public OpenApiSecurityRequirement() /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer); + SerializeInternal(writer, (writer, element) => element.SerializeAsV31(writer)); } /// @@ -41,13 +42,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer); + SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer)); } /// /// Serialize /// - private void SerializeInternal(IOpenApiWriter writer) + private void SerializeInternal(IOpenApiWriter writer, SerializeDelegate callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -66,7 +67,7 @@ private void SerializeInternal(IOpenApiWriter writer) continue; } - securityScheme.SerializeAsV3(writer); + callback(writer, securityScheme); writer.WriteStartArray(); diff --git a/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs b/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs index ea2660400..41945db3f 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs @@ -8,6 +8,7 @@ using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; +using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions; namespace Microsoft.OpenApi.Models { @@ -102,7 +103,7 @@ public OpenApiSecurityScheme(OpenApiSecurityScheme securityScheme) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer)); } /// @@ -110,29 +111,29 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); } /// /// Serialize to Open Api v3.0 /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); if (Reference != null) { - Reference.SerializeAsV3(writer); + callback(writer, Reference); return; } - SerializeAsV3WithoutReference(writer, version); + SerializeAsV3WithoutReference(writer, version, callback); } /// /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer.WriteStartObject(); @@ -161,7 +162,7 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVers case SecuritySchemeType.OAuth2: // This property apply to oauth2 type only. // flows - writer.WriteOptionalObject(OpenApiConstants.Flows, Flows, (w, o) => o.SerializeAsV3(w)); + writer.WriteOptionalObject(OpenApiConstants.Flows, Flows, (w, o) => callback(w, o)); break; case SecuritySchemeType.OpenIdConnect: // This property apply to openIdConnect only. diff --git a/src/Microsoft.OpenApi/Models/OpenApiServer.cs b/src/Microsoft.OpenApi/Models/OpenApiServer.cs index ae96c25fd..5f7363bf5 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiServer.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiServer.cs @@ -5,6 +5,7 @@ using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; +using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions; namespace Microsoft.OpenApi.Models { @@ -57,7 +58,7 @@ public OpenApiServer(OpenApiServer server) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer)); } /// @@ -65,13 +66,13 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); } /// /// Serialize to Open Api v3.0 /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -84,7 +85,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version writer.WriteProperty(OpenApiConstants.Description, Description); // variables - writer.WriteOptionalMap(OpenApiConstants.Variables, Variables, (w, v) => v.SerializeAsV3(w)); + writer.WriteOptionalMap(OpenApiConstants.Variables, Variables, (w, v) => callback(w, v)); // specification extensions writer.WriteExtensions(Extensions, version); diff --git a/src/Microsoft.OpenApi/Models/OpenApiTag.cs b/src/Microsoft.OpenApi/Models/OpenApiTag.cs index 088c6a83f..55dff6b18 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiTag.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiTag.cs @@ -5,6 +5,7 @@ using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; +using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions; namespace Microsoft.OpenApi.Models { @@ -66,7 +67,7 @@ public OpenApiTag(OpenApiTag tag) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer); + SerializeInternal(writer, (writer, element) => element.SerializeAsV31(writer)); } /// @@ -74,19 +75,19 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer); + SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer)); } /// /// Serialize to Open Api v3.0 /// - private void SerializeInternal(IOpenApiWriter writer) + private void SerializeInternal(IOpenApiWriter writer, SerializeDelegate callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); if (Reference != null) { - Reference.SerializeAsV3(writer); + callback(writer, Reference); return; } @@ -96,7 +97,7 @@ private void SerializeInternal(IOpenApiWriter writer) /// /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) { writer.WriteStartObject(); @@ -107,7 +108,7 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVers writer.WriteProperty(OpenApiConstants.Description, Description); // external docs - writer.WriteOptionalObject(OpenApiConstants.ExternalDocs, ExternalDocs, (w, e) => e.SerializeAsV3(w)); + writer.WriteOptionalObject(OpenApiConstants.ExternalDocs, ExternalDocs, (w, e) => callback(w, e)); // extensions. writer.WriteExtensions(Extensions, version); diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs index 7bd8aa6e3..7cf5815a5 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs @@ -60,7 +60,7 @@ public OpenApiSecurityScheme CloneSecurityScheme(OpenApiSecurityScheme element) { InlineLocalReferences = true }); - element.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); + element.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); writer.Flush(); stream.Position = 0; diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiCallbackTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiCallbackTests.cs index 593bdcfe7..810b98feb 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiCallbackTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiCallbackTests.cs @@ -151,7 +151,7 @@ public async Task SerializeReferencedCallbackAsV3JsonWithoutReferenceWorks(bool var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ReferencedCallback.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); + ReferencedCallback.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiExampleTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiExampleTests.cs index 0e5197e71..be9d8dc2a 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiExampleTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiExampleTests.cs @@ -152,7 +152,7 @@ public async Task SerializeReferencedExampleAsV3JsonWithoutReferenceWorks(bool p var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ReferencedExample.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); + ReferencedExample.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiHeaderTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiHeaderTests.cs index 6c5fa6f1f..3021090fb 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiHeaderTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiHeaderTests.cs @@ -94,7 +94,7 @@ public async Task SerializeReferencedHeaderAsV3JsonWithoutReferenceWorks(bool pr var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ReferencedHeader.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); + ReferencedHeader.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiLinkTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiLinkTests.cs index 7a9fc2ea8..211842b24 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiLinkTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiLinkTests.cs @@ -124,7 +124,7 @@ public async Task SerializeReferencedLinkAsV3JsonWithoutReferenceWorksAsync(bool var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ReferencedLink.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); + ReferencedLink.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiParameterTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiParameterTests.cs index 4fd03a6dd..759c573ca 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiParameterTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiParameterTests.cs @@ -316,7 +316,7 @@ public async Task SerializeReferencedParameterAsV3JsonWithoutReferenceWorksAsync var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ReferencedParameter.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); + ReferencedParameter.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); @@ -406,7 +406,7 @@ public async Task SerializeParameterWithFormStyleAndExplodeFalseWorksAsync(bool var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ParameterWithFormStyleAndExplodeFalse.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); + ParameterWithFormStyleAndExplodeFalse.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); @@ -424,7 +424,7 @@ public async Task SerializeParameterWithFormStyleAndExplodeTrueWorksAsync(bool p var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ParameterWithFormStyleAndExplodeTrue.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); + ParameterWithFormStyleAndExplodeTrue.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiRequestBodyTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiRequestBodyTests.cs index beb7833cd..5ab7f31a7 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiRequestBodyTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiRequestBodyTests.cs @@ -106,7 +106,7 @@ public async Task SerializeReferencedRequestBodyAsV3JsonWithoutReferenceWorksAsy var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ReferencedRequestBody.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); + ReferencedRequestBody.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiResponseTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiResponseTests.cs index 2534af737..39d6a1ad6 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiResponseTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiResponseTests.cs @@ -310,7 +310,7 @@ public async Task SerializeReferencedResponseAsV3JsonWithoutReferenceWorksAsync( var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ReferencedResponse.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); + ReferencedResponse.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs index c18790eab..982c8bc79 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs @@ -379,7 +379,7 @@ public async Task SerializeReferencedSchemaAsV3WithoutReferenceJsonWorksAsync(bo // Act - ReferencedSchema.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); + ReferencedSchema.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecurityRequirementTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecurityRequirementTests.cs index 7d630c5f6..f661c6f42 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecurityRequirementTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecurityRequirementTests.cs @@ -114,8 +114,7 @@ public void SerializeSecurityRequirementWithReferencedSecuritySchemeAsV3JsonWork }"; // Act - var actual = - SecurityRequirementWithReferencedSecurityScheme.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = SecurityRequirementWithReferencedSecurityScheme.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs index 0fe512a61..c04c87b53 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs @@ -334,7 +334,7 @@ public async Task SerializeReferencedSecuritySchemeAsV3JsonWithoutReferenceWorks var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ReferencedSecurityScheme.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); + ReferencedSecurityScheme.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiTagTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiTagTests.cs index 9cd5191b0..04d76a3bc 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiTagTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiTagTests.cs @@ -58,7 +58,7 @@ public async Task SerializeBasicTagAsV3JsonWithoutReferenceWorksAsync(bool produ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - BasicTag.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); + BasicTag.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); @@ -93,7 +93,7 @@ public void SerializeBasicTagAsV3YamlWithoutReferenceWorks() var expected = "{ }"; // Act - BasicTag.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); + BasicTag.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); var actual = outputStringWriter.GetStringBuilder().ToString(); // Assert @@ -131,7 +131,7 @@ public async Task SerializeAdvancedTagAsV3JsonWithoutReferenceWorksAsync(bool pr var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - AdvancedTag.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); + AdvancedTag.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); @@ -172,7 +172,7 @@ public void SerializeAdvancedTagAsV3YamlWithoutReferenceWorks() x-tag-extension: "; // Act - AdvancedTag.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); + AdvancedTag.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); From 896346865517635e3cb0c50e83f214dad968a881 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 1 Mar 2023 13:22:43 +0300 Subject: [PATCH 15/20] Use action function instead of delegate; Add method for serializing v3.1 without reference and clean up tests --- .../OpenApiSerializableExtensions.cs | 2 - .../Interfaces/IOpenApiReferenceable.cs | 9 +++- .../Models/OpenApiCallback.cs | 33 +++++++++++---- .../Models/OpenApiComponents.cs | 37 ++++++++-------- .../Models/OpenApiDocument.cs | 17 +++++--- .../Models/OpenApiEncoding.cs | 4 +- .../Models/OpenApiExample.cs | 32 ++++++++++---- .../Models/OpenApiExtensibleDictionary.cs | 4 +- src/Microsoft.OpenApi/Models/OpenApiHeader.cs | 38 ++++++++++++----- src/Microsoft.OpenApi/Models/OpenApiInfo.cs | 2 +- src/Microsoft.OpenApi/Models/OpenApiLink.cs | 29 +++++++++---- .../Models/OpenApiMediaType.cs | 3 +- .../Models/OpenApiOAuthFlows.cs | 4 +- .../Models/OpenApiOperation.cs | 2 +- .../Models/OpenApiParameter.cs | 42 +++++++++++++------ .../Models/OpenApiPathItem.cs | 32 ++++++++++---- .../Models/OpenApiRequestBody.cs | 36 +++++++++++----- .../Models/OpenApiResponse.cs | 35 ++++++++++++---- src/Microsoft.OpenApi/Models/OpenApiSchema.cs | 29 ++++++++++--- .../Models/OpenApiSecurityRequirement.cs | 3 +- .../Models/OpenApiSecurityScheme.cs | 27 +++++++++--- src/Microsoft.OpenApi/Models/OpenApiServer.cs | 4 +- src/Microsoft.OpenApi/Models/OpenApiTag.cs | 21 +++++++++- .../V3Tests/OpenApiDocumentTests.cs | 2 +- .../Models/OpenApiCallbackTests.cs | 2 +- .../Models/OpenApiExampleTests.cs | 2 +- .../Models/OpenApiHeaderTests.cs | 2 +- .../Models/OpenApiLinkTests.cs | 2 +- .../Models/OpenApiParameterTests.cs | 6 +-- .../Models/OpenApiRequestBodyTests.cs | 2 +- .../Models/OpenApiResponseTests.cs | 2 +- .../Models/OpenApiSchemaTests.cs | 2 +- .../Models/OpenApiSecuritySchemeTests.cs | 2 +- .../Models/OpenApiTagTests.cs | 8 ++-- 34 files changed, 339 insertions(+), 138 deletions(-) diff --git a/src/Microsoft.OpenApi/Extensions/OpenApiSerializableExtensions.cs b/src/Microsoft.OpenApi/Extensions/OpenApiSerializableExtensions.cs index 9c4300c6b..6489c0fc0 100755 --- a/src/Microsoft.OpenApi/Extensions/OpenApiSerializableExtensions.cs +++ b/src/Microsoft.OpenApi/Extensions/OpenApiSerializableExtensions.cs @@ -15,8 +15,6 @@ namespace Microsoft.OpenApi.Extensions /// public static class OpenApiSerializableExtensions { - public delegate void SerializeDelegate(IOpenApiWriter writer, IOpenApiSerializable element); - /// /// Serialize the to the Open API document (JSON) using the given stream and specification version. /// diff --git a/src/Microsoft.OpenApi/Interfaces/IOpenApiReferenceable.cs b/src/Microsoft.OpenApi/Interfaces/IOpenApiReferenceable.cs index b11de7671..e4d1224ab 100644 --- a/src/Microsoft.OpenApi/Interfaces/IOpenApiReferenceable.cs +++ b/src/Microsoft.OpenApi/Interfaces/IOpenApiReferenceable.cs @@ -22,11 +22,16 @@ public interface IOpenApiReferenceable : IOpenApiSerializable /// Reference object. /// OpenApiReference Reference { get; set; } - + + /// + /// Serialize to OpenAPI V31 document without using reference. + /// + void SerializeAsV31WithoutReference(IOpenApiWriter writer); + /// /// Serialize to OpenAPI V3 document without using reference. /// - void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback); + void SerializeAsV3WithoutReference(IOpenApiWriter writer); /// /// Serialize to OpenAPI V2 document without using reference. diff --git a/src/Microsoft.OpenApi/Models/OpenApiCallback.cs b/src/Microsoft.OpenApi/Models/OpenApiCallback.cs index 33f153465..f42d9e2e3 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiCallback.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiCallback.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; using System.Collections.Generic; using Microsoft.OpenApi.Expressions; using Microsoft.OpenApi.Interfaces; @@ -83,7 +84,8 @@ public void AddPathItem(RuntimeExpression expression, OpenApiPathItem pathItem) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV3(writer)); + SerializeInternal(writer, (writer, element) => element.SerializeAsV31(writer), + (writer, referenceElement) => referenceElement.SerializeAsV31WithoutReference(writer)); } /// @@ -91,16 +93,19 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); + SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer), + (writer, referenceElement) => referenceElement.SerializeAsV3WithoutReference(writer)); } /// /// Serialize /// /// - /// /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + /// + private void SerializeInternal(IOpenApiWriter writer, + Action callback, + Action action) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -118,7 +123,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version target = GetEffective(Reference.HostDocument); } } - target.SerializeAsV3WithoutReference(writer, version, callback); + action(writer, target); } /// @@ -138,12 +143,26 @@ public OpenApiCallback GetEffective(OpenApiDocument doc) } } + /// + /// Serialize to OpenAPI V31 document without using reference. + /// + public void SerializeAsV31WithoutReference(IOpenApiWriter writer) + { + SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1, + (writer, element) => element.SerializeAsV31(writer)); + } /// /// Serialize to OpenAPI V3 document without using reference. /// + public void SerializeAsV3WithoutReference(IOpenApiWriter writer) + { + SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, + (writer, element) => element.SerializeAsV3(writer)); + } - public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, + Action callback) { writer.WriteStartObject(); @@ -155,7 +174,7 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVers // extensions writer.WriteExtensions(Extensions, version); - + writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiComponents.cs b/src/Microsoft.OpenApi/Models/OpenApiComponents.cs index 3004cdae8..ffef8c9c3 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiComponents.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiComponents.cs @@ -101,9 +101,10 @@ public OpenApiComponents(OpenApiComponents components) /// /// public void SerializeAsV31(IOpenApiWriter writer) - { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV3(writer)); - + { + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer), + (writer, referenceElement) => referenceElement.SerializeAsV31WithoutReference(writer)); + // pathItems - only present in v3.1 writer.WriteOptionalMap( OpenApiConstants.PathItems, @@ -114,11 +115,11 @@ public void SerializeAsV31(IOpenApiWriter writer) component.Reference.Type == ReferenceType.Schema && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w, OpenApiSpecVersion.OpenApi3_1, callback: (w, e) => e.SerializeAsV3(w)); + component.SerializeAsV31WithoutReference(w); } else { - component.SerializeAsV3(w); + component.SerializeAsV31(w); } }); @@ -131,14 +132,16 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer), + (writer, referenceElement) => referenceElement.SerializeAsV3WithoutReference(writer)); writer.WriteEndObject(); } /// /// Serialize . /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, + Action callback, Action action) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -157,7 +160,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version OpenApiConstants.Schemas, Schemas, (w, key, component) => { - component.SerializeAsV3WithoutReference(w, version, callback); + action(w, component); }); } writer.WriteEndObject(); @@ -179,7 +182,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version component.Reference.Type == ReferenceType.Schema && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w, version, callback); + action(w, component); } else { @@ -197,7 +200,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version component.Reference.Type == ReferenceType.Response && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w, version, callback); + action(w, component); } else { @@ -215,7 +218,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version component.Reference.Type == ReferenceType.Parameter && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w, version, callback); + action(w, component); } else { @@ -233,7 +236,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version component.Reference.Type == ReferenceType.Example && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w, version, callback); + action(writer, component); } else { @@ -251,7 +254,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version component.Reference.Type == ReferenceType.RequestBody && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w, version, callback); + action(w, component); } else { @@ -269,7 +272,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version component.Reference.Type == ReferenceType.Header && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w, version, callback); + action(w, component); } else { @@ -287,7 +290,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version component.Reference.Type == ReferenceType.SecurityScheme && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w, version, callback); + action(w, component); } else { @@ -305,7 +308,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version component.Reference.Type == ReferenceType.Link && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w, version, callback); + action(w, component); } else { @@ -323,7 +326,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version component.Reference.Type == ReferenceType.Callback && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w, version, callback); + action(w, component); } else { diff --git a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs index 5f4eb0a6a..2c30a60c0 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs @@ -122,7 +122,8 @@ public void SerializeAsV31(IOpenApiWriter writer) // jsonSchemaDialect writer.WriteProperty(OpenApiConstants.JsonSchemaDialect, JsonSchemaDialect); - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (w, element) => element.SerializeAsV31(w)); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (w, element) => element.SerializeAsV31(w), + (w, element) => element.SerializeAsV31WithoutReference(w)); // webhooks writer.WriteOptionalMap( @@ -134,7 +135,7 @@ public void SerializeAsV31(IOpenApiWriter writer) component.Reference.Type == ReferenceType.PathItem && component.Reference.Id == key) { - component.SerializeAsV3WithoutReference(w, OpenApiSpecVersion.OpenApi3_1, callback: (w, e) => e.SerializeAsV3(w)); + component.SerializeAsV31WithoutReference(w); } else { @@ -157,7 +158,8 @@ public void SerializeAsV3(IOpenApiWriter writer) // openapi writer.WriteProperty(OpenApiConstants.OpenApi, "3.0.1"); - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (w, element) => element.SerializeAsV3(w)); + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (w, element) => element.SerializeAsV3(w), + (w, element) => element.SerializeAsV3WithoutReference(w)); writer.WriteEndObject(); } @@ -167,7 +169,10 @@ public void SerializeAsV3(IOpenApiWriter writer) /// /// /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + /// + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, + Action callback, + Action action) { // info writer.WriteRequiredObject(OpenApiConstants.Info, Info, (w, i) => callback(w, i)); @@ -188,13 +193,13 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version (w, s) => callback(w, s)); // tags - writer.WriteOptionalCollection(OpenApiConstants.Tags, Tags, (w, t) => t.SerializeAsV3WithoutReference(w, version, callback)); + writer.WriteOptionalCollection(OpenApiConstants.Tags, Tags, (w, t) => action(w, t)); // external docs writer.WriteOptionalObject(OpenApiConstants.ExternalDocs, ExternalDocs, (w, e) => callback(w, e)); // extensions - writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0); + writer.WriteExtensions(Extensions, version); } /// diff --git a/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs b/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs index 1965335fe..8730976da 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; using System.Collections.Generic; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Extensions; @@ -93,7 +94,8 @@ public void SerializeAsV3(IOpenApiWriter writer) /// /// Serialize to Open Api v3.0. /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, + Action callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); diff --git a/src/Microsoft.OpenApi/Models/OpenApiExample.cs b/src/Microsoft.OpenApi/Models/OpenApiExample.cs index b870b02f1..15e04fe5b 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiExample.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiExample.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; using System.Collections.Generic; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Interfaces; @@ -80,7 +81,8 @@ public OpenApiExample(OpenApiExample example) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer)); + SerializeInternal(writer, (writer, element) => element.SerializeAsV31(writer), + (writer, element) => element.SerializeAsV31WithoutReference(writer)); } /// @@ -89,13 +91,12 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); + SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer), + (writer, element) => element.SerializeAsV3WithoutReference(writer)); } - /// - /// Serialize to Open Api v3.0 - /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + private void SerializeInternal(IOpenApiWriter writer, Action callback, + Action action) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -113,7 +114,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version target = GetEffective(Reference.HostDocument); } } - target.SerializeAsV3WithoutReference(writer, version, callback); + action(writer, target); } /// @@ -134,9 +135,22 @@ public OpenApiExample GetEffective(OpenApiDocument doc) } /// - /// Serialize to OpenAPI V3 document without using reference. + /// Serialize to OpenAPI V31 example without using reference. + /// + public void SerializeAsV31WithoutReference(IOpenApiWriter writer) + { + SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1); + } + + /// + /// Serialize to OpenAPI V3 example without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer) + { + SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0); + } + + private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version) { writer.WriteStartObject(); diff --git a/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs b/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs index 1e6d9ec5f..126605abc 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; using System.Collections.Generic; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; @@ -61,7 +62,8 @@ public void SerializeAsV3(IOpenApiWriter writer) /// /// Serialize to Open Api v3.0 /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, + Action callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); diff --git a/src/Microsoft.OpenApi/Models/OpenApiHeader.cs b/src/Microsoft.OpenApi/Models/OpenApiHeader.cs index 4af26d47c..baa22c535 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiHeader.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiHeader.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; using System.Collections.Generic; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Extensions; @@ -118,7 +119,8 @@ public OpenApiHeader(OpenApiHeader header) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer)); + SerializeInternal(writer, (writer, element) => element.SerializeAsV31(writer), + (writer, element) => element.SerializeAsV31WithoutReference(writer)); } /// @@ -126,13 +128,12 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); - } - - /// - /// Serialize to Open Api v3.0 - /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer), + (writer, element) => element.SerializeAsV3WithoutReference(writer)); + } + + private void SerializeInternal(IOpenApiWriter writer, Action callback, + Action action) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -150,8 +151,8 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version target = GetEffective(Reference.HostDocument); } } - target.SerializeAsV3WithoutReference(writer, version, callback); - + + action(writer, target); } /// @@ -171,11 +172,26 @@ public OpenApiHeader GetEffective(OpenApiDocument doc) } } + /// + /// Serialize to OpenAPI V31 document without using reference. + /// + public void SerializeAsV31WithoutReference(IOpenApiWriter writer) + { + SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1, + (writer, element) => element.SerializeAsV31(writer)); + } /// /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer) + { + SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, + (writer, element) => element.SerializeAsV3(writer)); + } + + private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, + Action callback) { writer.WriteStartObject(); diff --git a/src/Microsoft.OpenApi/Models/OpenApiInfo.cs b/src/Microsoft.OpenApi/Models/OpenApiInfo.cs index 02b3eb1da..a9f222bf0 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiInfo.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiInfo.cs @@ -99,7 +99,7 @@ public void SerializeAsV3(IOpenApiWriter writer) /// /// Serialize to Open Api v3.0 /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, Action callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); writer.WriteStartObject(); diff --git a/src/Microsoft.OpenApi/Models/OpenApiLink.cs b/src/Microsoft.OpenApi/Models/OpenApiLink.cs index 2e0981d87..bbb8f4e28 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiLink.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiLink.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; using System.Collections.Generic; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Interfaces; @@ -88,7 +89,8 @@ public OpenApiLink(OpenApiLink link) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer)); + SerializeInternal(writer, (writer, element) => element.SerializeAsV31(writer), + (writer, element) => element.SerializeAsV31WithoutReference(writer)); } /// @@ -96,13 +98,12 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); + SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer), + (writer, element) => element.SerializeAsV3WithoutReference(writer)); } - /// - /// Serialize - /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + private void SerializeInternal(IOpenApiWriter writer, Action callback, + Action action) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -120,7 +121,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version target = GetEffective(Reference.HostDocument); } } - target.SerializeAsV3WithoutReference(writer, version, callback); + action(writer, target); } /// @@ -140,11 +141,23 @@ public OpenApiLink GetEffective(OpenApiDocument doc) } } + /// + /// Serialize to OpenAPI V31 document without using reference. + /// + public void SerializeAsV31WithoutReference(IOpenApiWriter writer) + { + SerializeInternalWithoutReference(writer, (writer, element) => element.SerializeAsV31(writer)); + } /// /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer) + { + SerializeInternalWithoutReference(writer, (writer, element) => element.SerializeAsV3(writer)); + } + + private void SerializeInternalWithoutReference(IOpenApiWriter writer, Action callback) { writer.WriteStartObject(); diff --git a/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs b/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs index 03324479e..408b17567 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs @@ -81,7 +81,8 @@ public void SerializeAsV3(IOpenApiWriter writer) /// /// Serialize to Open Api v3.0. /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, + Action callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); diff --git a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs index 0d2a384f9..3f47f1780 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; using System.Collections.Generic; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Interfaces; @@ -76,7 +77,8 @@ public void SerializeAsV3(IOpenApiWriter writer) /// /// Serialize /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, + Action callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); diff --git a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs index 2a19a6aad..1b637b3c0 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs @@ -151,7 +151,7 @@ public void SerializeAsV3(IOpenApiWriter writer) /// /// Serialize to Open Api v3.0. /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, Action callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); diff --git a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs index 0d6658238..67f703a96 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; using System.Collections.Generic; using System.Runtime; using Microsoft.OpenApi.Any; @@ -175,7 +176,8 @@ public OpenApiParameter(OpenApiParameter parameter) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer)); + SerializeInternal(writer, (writer, element) => element.SerializeAsV31(writer), + (writer, element) => element.SerializeAsV31WithoutReference(writer)); } /// @@ -183,13 +185,12 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); - } - - /// - /// Serialize - /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer), + (writer, element) => element.SerializeAsV3WithoutReference(writer)); + } + + private void SerializeInternal(IOpenApiWriter writer, Action callback, + Action action) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -204,11 +205,10 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version } else { - target = this.GetEffective(Reference.HostDocument); + target = GetEffective(Reference.HostDocument); } } - - target.SerializeAsV3WithoutReference(writer, version, callback); + action(writer, target); } /// @@ -227,11 +227,27 @@ public OpenApiParameter GetEffective(OpenApiDocument doc) return this; } } - + /// /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + public void SerializeAsV31WithoutReference(IOpenApiWriter writer) + { + SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1, + (writer, element) => element.SerializeAsV31(writer)); + } + + /// + /// Serialize to OpenAPI V3 document without using reference. + /// + public void SerializeAsV3WithoutReference(IOpenApiWriter writer) + { + SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, + (writer, element) => element.SerializeAsV3(writer)); + } + + private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, + Action callback) { writer.WriteStartObject(); diff --git a/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs b/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs index 484306c01..1df4465b1 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; using System.Collections.Generic; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Interfaces; @@ -91,7 +92,8 @@ public OpenApiPathItem(OpenApiPathItem pathItem) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer)); + SerializeInternal(writer, (writer, element) => element.SerializeAsV31(writer), + (writer, element) => element.SerializeAsV31WithoutReference(writer)); } /// @@ -99,13 +101,15 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); + SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer), + (writer, element) => element.SerializeAsV3WithoutReference(writer)); } /// /// Serialize to Open Api v3.0 /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + private void SerializeInternal(IOpenApiWriter writer, Action callback, + Action action) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); var target = this; @@ -122,7 +126,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version target = GetEffective(Reference.HostDocument); } } - target.SerializeAsV3WithoutReference(writer, version, callback); + action(writer, target); } /// @@ -204,14 +208,28 @@ public void SerializeAsV2WithoutReference(IOpenApiWriter writer) writer.WriteEndObject(); } + + /// + /// Serialize inline PathItem in OpenAPI V31 + /// + /// + public void SerializeAsV31WithoutReference(IOpenApiWriter writer) + { + SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer)); + } /// /// Serialize inline PathItem in OpenAPI V3 /// /// - /// - /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer) + { + SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); + + } + + private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, + Action callback) { writer.WriteStartObject(); diff --git a/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs b/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs index 525d6cd40..771924630 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs @@ -71,7 +71,8 @@ public OpenApiRequestBody(OpenApiRequestBody requestBody) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer)); + SerializeInternal(writer, (writer, element) => element.SerializeAsV31(writer), + (writer, element) => element.SerializeAsV31WithoutReference(writer)); } /// @@ -79,13 +80,12 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); - } - - /// - /// Serialize to Open Api v3.0 - /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer), + (writer, element) => element.SerializeAsV3WithoutReference(writer)); + } + + private void SerializeInternal(IOpenApiWriter writer, Action callback, + Action action) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -103,7 +103,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version target = GetEffective(Reference.HostDocument); } } - target.SerializeAsV3WithoutReference(writer, version, callback); + action(writer, target); } /// @@ -123,10 +123,26 @@ public OpenApiRequestBody GetEffective(OpenApiDocument doc) } } + /// + /// Serialize to OpenAPI V31 document without using reference. + /// + public void SerializeAsV31WithoutReference(IOpenApiWriter writer) + { + SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1, + (writer, element) => element.SerializeAsV31(writer)); + } + /// /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer) + { + SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, + (writer, element) => element.SerializeAsV3(writer)); + } + + private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, + Action callback) { writer.WriteStartObject(); diff --git a/src/Microsoft.OpenApi/Models/OpenApiResponse.cs b/src/Microsoft.OpenApi/Models/OpenApiResponse.cs index 16d727115..ab9631b68 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiResponse.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiResponse.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; using System.Collections.Generic; using System.Linq; using Microsoft.OpenApi.Interfaces; @@ -76,7 +77,8 @@ public OpenApiResponse(OpenApiResponse response) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer)); + SerializeInternal(writer, (writer, element) => element.SerializeAsV31(writer), + (writer, element) => element.SerializeAsV31WithoutReference(writer)); } /// @@ -84,13 +86,12 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); + SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer), + (writer, element) => element.SerializeAsV3WithoutReference(writer)); } - - /// - /// Serialize - /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + + private void SerializeInternal(IOpenApiWriter writer, Action callback, + Action action) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -108,7 +109,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version target = GetEffective(Reference.HostDocument); } } - target.SerializeAsV3WithoutReference(writer, version, callback); + action(writer, target); } /// @@ -127,11 +128,27 @@ public OpenApiResponse GetEffective(OpenApiDocument doc) return this; } } + + /// + /// Serialize to OpenAPI V3 document without using reference. + /// + public void SerializeAsV31WithoutReference(IOpenApiWriter writer) + { + SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1, + (writer, element) => element.SerializeAsV31(writer)); + } /// /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer) + { + SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, + (writer, element) => element.SerializeAsV3(writer)); + } + + private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, + Action callback) { writer.WriteStartObject(); diff --git a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs index b5918b7a9..5b475965c 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; using System.Collections.Generic; using System.Linq; using Microsoft.OpenApi.Any; @@ -298,7 +299,8 @@ public OpenApiSchema(OpenApiSchema schema) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer)); + SerializeInternal(writer, (writer, element) => element.SerializeAsV31(writer), + (writer, element) => element.SerializeAsV31WithoutReference(writer)); } /// @@ -306,13 +308,15 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); + SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer), + (writer, element) => element.SerializeAsV3WithoutReference(writer)); } /// /// Serialize to Open Api v3.0 /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + private void SerializeInternal(IOpenApiWriter writer, Action callback, + Action action) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -342,8 +346,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version return; } } - - target.SerializeAsV3WithoutReference(writer, version, callback); + action(writer, target); if (Reference != null) { @@ -351,10 +354,24 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version } } + /// + /// Serialize to OpenAPI V31 document without using reference. + /// + public void SerializeAsV31WithoutReference(IOpenApiWriter writer) + { + SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer)); + } + /// /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer) + { + SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); + } + + private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, + Action callback) { writer.WriteStartObject(); diff --git a/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs b/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs index ed1df0a84..3ccf9b468 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; using System.Collections.Generic; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Writers; @@ -48,7 +49,7 @@ public void SerializeAsV3(IOpenApiWriter writer) /// /// Serialize /// - private void SerializeInternal(IOpenApiWriter writer, SerializeDelegate callback) + private void SerializeInternal(IOpenApiWriter writer, Action callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); diff --git a/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs b/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs index 41945db3f..2f84cf2d3 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs @@ -103,7 +103,7 @@ public OpenApiSecurityScheme(OpenApiSecurityScheme securityScheme) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer)); + SerializeInternal(writer, (writer, element) => element.SerializeAsV31(writer), SerializeAsV31WithoutReference); } /// @@ -111,13 +111,14 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer)); + SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer), SerializeAsV3WithoutReference); } /// /// Serialize to Open Api v3.0 /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + private void SerializeInternal(IOpenApiWriter writer, Action callback, + Action action) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -126,14 +127,30 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version callback(writer, Reference); return; } + + action(writer); + } - SerializeAsV3WithoutReference(writer, version, callback); + /// + /// Serialize to OpenAPI V31 document without using reference. + /// + public void SerializeAsV31WithoutReference(IOpenApiWriter writer) + { + SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1, + (writer, element) => element.SerializeAsV31(writer)); } /// /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + public void SerializeAsV3WithoutReference(IOpenApiWriter writer) + { + SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, + (writer, element) => element.SerializeAsV3(writer)); + } + + private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, + Action callback) { writer.WriteStartObject(); diff --git a/src/Microsoft.OpenApi/Models/OpenApiServer.cs b/src/Microsoft.OpenApi/Models/OpenApiServer.cs index 5f7363bf5..6d9339a92 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiServer.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiServer.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; using System.Collections.Generic; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Interfaces; @@ -72,7 +73,8 @@ public void SerializeAsV3(IOpenApiWriter writer) /// /// Serialize to Open Api v3.0 /// - private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, + Action callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); diff --git a/src/Microsoft.OpenApi/Models/OpenApiTag.cs b/src/Microsoft.OpenApi/Models/OpenApiTag.cs index 55dff6b18..23cf1afcd 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiTag.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiTag.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; using System.Collections.Generic; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Interfaces; @@ -81,7 +82,7 @@ public void SerializeAsV3(IOpenApiWriter writer) /// /// Serialize to Open Api v3.0 /// - private void SerializeInternal(IOpenApiWriter writer, SerializeDelegate callback) + private void SerializeInternal(IOpenApiWriter writer, Action callback) { writer = writer ?? throw Error.ArgumentNull(nameof(writer)); @@ -97,7 +98,23 @@ private void SerializeInternal(IOpenApiWriter writer, SerializeDelegate callback /// /// Serialize to OpenAPI V3 document without using reference. /// - public void SerializeAsV3WithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, SerializeDelegate callback) + public void SerializeAsV31WithoutReference(IOpenApiWriter writer) + { + SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1, + (writer, element) => element.SerializeAsV31(writer)); + } + + /// + /// Serialize to OpenAPI V3 document without using reference. + /// + public void SerializeAsV3WithoutReference(IOpenApiWriter writer) + { + SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, + (writer, element) => element.SerializeAsV3(writer)); + } + + private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version, + Action callback) { writer.WriteStartObject(); diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs index 7cf5815a5..dd2235631 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs @@ -60,7 +60,7 @@ public OpenApiSecurityScheme CloneSecurityScheme(OpenApiSecurityScheme element) { InlineLocalReferences = true }); - element.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); + element.SerializeAsV3WithoutReference(writer); writer.Flush(); stream.Position = 0; diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiCallbackTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiCallbackTests.cs index 810b98feb..9d512566f 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiCallbackTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiCallbackTests.cs @@ -151,7 +151,7 @@ public async Task SerializeReferencedCallbackAsV3JsonWithoutReferenceWorks(bool var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ReferencedCallback.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); + ReferencedCallback.SerializeAsV3WithoutReference(writer); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiExampleTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiExampleTests.cs index be9d8dc2a..6108c3c26 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiExampleTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiExampleTests.cs @@ -152,7 +152,7 @@ public async Task SerializeReferencedExampleAsV3JsonWithoutReferenceWorks(bool p var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ReferencedExample.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); + ReferencedExample.SerializeAsV3WithoutReference(writer); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiHeaderTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiHeaderTests.cs index 3021090fb..846d470ba 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiHeaderTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiHeaderTests.cs @@ -94,7 +94,7 @@ public async Task SerializeReferencedHeaderAsV3JsonWithoutReferenceWorks(bool pr var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ReferencedHeader.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); + ReferencedHeader.SerializeAsV3WithoutReference(writer); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiLinkTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiLinkTests.cs index 211842b24..4e439a2a8 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiLinkTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiLinkTests.cs @@ -124,7 +124,7 @@ public async Task SerializeReferencedLinkAsV3JsonWithoutReferenceWorksAsync(bool var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ReferencedLink.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); + ReferencedLink.SerializeAsV3WithoutReference(writer); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiParameterTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiParameterTests.cs index 759c573ca..cfcc56d15 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiParameterTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiParameterTests.cs @@ -316,7 +316,7 @@ public async Task SerializeReferencedParameterAsV3JsonWithoutReferenceWorksAsync var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ReferencedParameter.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); + ReferencedParameter.SerializeAsV3WithoutReference(writer); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); @@ -406,7 +406,7 @@ public async Task SerializeParameterWithFormStyleAndExplodeFalseWorksAsync(bool var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ParameterWithFormStyleAndExplodeFalse.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); + ParameterWithFormStyleAndExplodeFalse.SerializeAsV3WithoutReference(writer); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); @@ -424,7 +424,7 @@ public async Task SerializeParameterWithFormStyleAndExplodeTrueWorksAsync(bool p var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ParameterWithFormStyleAndExplodeTrue.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); + ParameterWithFormStyleAndExplodeTrue.SerializeAsV3WithoutReference(writer); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiRequestBodyTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiRequestBodyTests.cs index 5ab7f31a7..d8bdacae4 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiRequestBodyTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiRequestBodyTests.cs @@ -106,7 +106,7 @@ public async Task SerializeReferencedRequestBodyAsV3JsonWithoutReferenceWorksAsy var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ReferencedRequestBody.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); + ReferencedRequestBody.SerializeAsV3WithoutReference(writer); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiResponseTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiResponseTests.cs index 39d6a1ad6..a5555ddd9 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiResponseTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiResponseTests.cs @@ -310,7 +310,7 @@ public async Task SerializeReferencedResponseAsV3JsonWithoutReferenceWorksAsync( var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ReferencedResponse.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); + ReferencedResponse.SerializeAsV3WithoutReference(writer); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs index 982c8bc79..429129c1e 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs @@ -379,7 +379,7 @@ public async Task SerializeReferencedSchemaAsV3WithoutReferenceJsonWorksAsync(bo // Act - ReferencedSchema.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); + ReferencedSchema.SerializeAsV3WithoutReference(writer); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs index c04c87b53..1294f0f48 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecuritySchemeTests.cs @@ -334,7 +334,7 @@ public async Task SerializeReferencedSecuritySchemeAsV3JsonWithoutReferenceWorks var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - ReferencedSecurityScheme.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); + ReferencedSecurityScheme.SerializeAsV3WithoutReference(writer); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiTagTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiTagTests.cs index 04d76a3bc..7e837bd52 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiTagTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiTagTests.cs @@ -58,7 +58,7 @@ public async Task SerializeBasicTagAsV3JsonWithoutReferenceWorksAsync(bool produ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - BasicTag.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); + BasicTag.SerializeAsV3WithoutReference(writer); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); @@ -93,7 +93,7 @@ public void SerializeBasicTagAsV3YamlWithoutReferenceWorks() var expected = "{ }"; // Act - BasicTag.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); + BasicTag.SerializeAsV3WithoutReference(writer); var actual = outputStringWriter.GetStringBuilder().ToString(); // Assert @@ -131,7 +131,7 @@ public async Task SerializeAdvancedTagAsV3JsonWithoutReferenceWorksAsync(bool pr var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput }); // Act - AdvancedTag.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); + AdvancedTag.SerializeAsV3WithoutReference(writer); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); @@ -172,7 +172,7 @@ public void SerializeAdvancedTagAsV3YamlWithoutReferenceWorks() x-tag-extension: "; // Act - AdvancedTag.SerializeAsV3WithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, callback: (w, e) => e.SerializeAsV3(writer)); + AdvancedTag.SerializeAsV3WithoutReference(writer); writer.Flush(); var actual = outputStringWriter.GetStringBuilder().ToString(); From b1a695ef710108618ee3eff5d021b6505e0dbc95 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 6 Mar 2023 15:52:29 +0300 Subject: [PATCH 16/20] Code cleanup --- .../Models/OpenApiCallback.cs | 2 +- .../Models/OpenApiDocument.cs | 12 ++++++------ .../Models/OpenApiEncoding.cs | 2 +- .../Models/OpenApiExtensibleDictionary.cs | 2 +- src/Microsoft.OpenApi/Models/OpenApiHeader.cs | 6 +++--- src/Microsoft.OpenApi/Models/OpenApiInfo.cs | 4 ++-- src/Microsoft.OpenApi/Models/OpenApiLink.cs | 2 +- .../Models/OpenApiMediaType.cs | 6 +++--- .../Models/OpenApiOAuthFlows.cs | 8 ++++---- .../Models/OpenApiOperation.cs | 19 ++++++++----------- .../Models/OpenApiParameter.cs | 6 +++--- .../Models/OpenApiPathItem.cs | 6 +++--- .../Models/OpenApiRequestBody.cs | 2 +- .../Models/OpenApiResponse.cs | 6 +++--- src/Microsoft.OpenApi/Models/OpenApiSchema.cs | 18 +++++++++--------- .../Models/OpenApiSecurityScheme.cs | 2 +- src/Microsoft.OpenApi/Models/OpenApiServer.cs | 2 +- src/Microsoft.OpenApi/Models/OpenApiTag.cs | 2 +- .../Models/OpenApiSecurityRequirementTests.cs | 9 +++------ 19 files changed, 55 insertions(+), 61 deletions(-) diff --git a/src/Microsoft.OpenApi/Models/OpenApiCallback.cs b/src/Microsoft.OpenApi/Models/OpenApiCallback.cs index f42d9e2e3..09f1b6256 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiCallback.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiCallback.cs @@ -169,7 +169,7 @@ private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpe // path items foreach (var item in PathItems) { - writer.WriteRequiredObject(item.Key.Expression, item.Value, (w, p) => callback(w, p)); + writer.WriteRequiredObject(item.Key.Expression, item.Value, callback); } // extensions diff --git a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs index 2c30a60c0..bddede097 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs @@ -175,28 +175,28 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version Action action) { // info - writer.WriteRequiredObject(OpenApiConstants.Info, Info, (w, i) => callback(w, i)); + writer.WriteRequiredObject(OpenApiConstants.Info, Info, callback); // servers - writer.WriteOptionalCollection(OpenApiConstants.Servers, Servers, (w, s) => callback(w, s)); + writer.WriteOptionalCollection(OpenApiConstants.Servers, Servers, callback); // paths - writer.WriteRequiredObject(OpenApiConstants.Paths, Paths, (w, p) => callback(w, p)); + writer.WriteRequiredObject(OpenApiConstants.Paths, Paths, callback); // components - writer.WriteOptionalObject(OpenApiConstants.Components, Components, (w, c) => callback(w, c)); + writer.WriteOptionalObject(OpenApiConstants.Components, Components, callback); // security writer.WriteOptionalCollection( OpenApiConstants.Security, SecurityRequirements, - (w, s) => callback(w, s)); + callback); // tags writer.WriteOptionalCollection(OpenApiConstants.Tags, Tags, (w, t) => action(w, t)); // external docs - writer.WriteOptionalObject(OpenApiConstants.ExternalDocs, ExternalDocs, (w, e) => callback(w, e)); + writer.WriteOptionalObject(OpenApiConstants.ExternalDocs, ExternalDocs, callback); // extensions writer.WriteExtensions(Extensions, version); diff --git a/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs b/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs index 8730976da..3753b187c 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs @@ -105,7 +105,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version writer.WriteProperty(OpenApiConstants.ContentType, ContentType); // headers - writer.WriteOptionalMap(OpenApiConstants.Headers, Headers, (w, h) => callback(w, h)); + writer.WriteOptionalMap(OpenApiConstants.Headers, Headers, callback); // style writer.WriteProperty(OpenApiConstants.Style, Style?.GetDisplayName()); diff --git a/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs b/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs index 126605abc..aaeeee49c 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs @@ -71,7 +71,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version foreach (var item in this) { - writer.WriteRequiredObject(item.Key, item.Value, (w, p) => callback(w, p)); + writer.WriteRequiredObject(item.Key, item.Value, callback); } writer.WriteExtensions(Extensions, version); diff --git a/src/Microsoft.OpenApi/Models/OpenApiHeader.cs b/src/Microsoft.OpenApi/Models/OpenApiHeader.cs index baa22c535..7f289b1c2 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiHeader.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiHeader.cs @@ -217,16 +217,16 @@ private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpe writer.WriteProperty(OpenApiConstants.AllowReserved, AllowReserved, false); // schema - writer.WriteOptionalObject(OpenApiConstants.Schema, Schema, (w, s) => callback(w, s)); + writer.WriteOptionalObject(OpenApiConstants.Schema, Schema, callback); // example writer.WriteOptionalObject(OpenApiConstants.Example, Example, (w, s) => w.WriteAny(s)); // examples - writer.WriteOptionalMap(OpenApiConstants.Examples, Examples, (w, e) => callback(w, e)); + writer.WriteOptionalMap(OpenApiConstants.Examples, Examples, callback); // content - writer.WriteOptionalMap(OpenApiConstants.Content, Content, (w, c) => callback(w, c)); + writer.WriteOptionalMap(OpenApiConstants.Content, Content, callback); // extensions writer.WriteExtensions(Extensions, version); diff --git a/src/Microsoft.OpenApi/Models/OpenApiInfo.cs b/src/Microsoft.OpenApi/Models/OpenApiInfo.cs index a9f222bf0..fa6c7690a 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiInfo.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiInfo.cs @@ -114,10 +114,10 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version writer.WriteProperty(OpenApiConstants.TermsOfService, TermsOfService?.OriginalString); // contact object - writer.WriteOptionalObject(OpenApiConstants.Contact, Contact, (w, c) => callback(w, c)); + writer.WriteOptionalObject(OpenApiConstants.Contact, Contact, callback); // license object - writer.WriteOptionalObject(OpenApiConstants.License, License, (w, l) => callback(w, l)); + writer.WriteOptionalObject(OpenApiConstants.License, License, callback); // version writer.WriteProperty(OpenApiConstants.Version, Version); diff --git a/src/Microsoft.OpenApi/Models/OpenApiLink.cs b/src/Microsoft.OpenApi/Models/OpenApiLink.cs index bbb8f4e28..2e714c8fe 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiLink.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiLink.cs @@ -177,7 +177,7 @@ private void SerializeInternalWithoutReference(IOpenApiWriter writer, Action callback(w, s)); + writer.WriteOptionalObject(OpenApiConstants.Server, Server, callback); writer.WriteEndObject(); } diff --git a/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs b/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs index 408b17567..86de2d554 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs @@ -89,16 +89,16 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version writer.WriteStartObject(); // schema - writer.WriteOptionalObject(OpenApiConstants.Schema, Schema, (w, s) => callback(w, s)); + writer.WriteOptionalObject(OpenApiConstants.Schema, Schema, callback); // example writer.WriteOptionalObject(OpenApiConstants.Example, Example, (w, e) => w.WriteAny(e)); // examples - writer.WriteOptionalMap(OpenApiConstants.Examples, Examples, (w, e) => callback(w, e)); + writer.WriteOptionalMap(OpenApiConstants.Examples, Examples, callback); // encoding - writer.WriteOptionalMap(OpenApiConstants.Encoding, Encoding, (w, e) => callback(w, e)); + writer.WriteOptionalMap(OpenApiConstants.Encoding, Encoding, callback); // extensions writer.WriteExtensions(Extensions, version); diff --git a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs index 3f47f1780..d37088248 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs @@ -85,22 +85,22 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version writer.WriteStartObject(); // implicit - writer.WriteOptionalObject(OpenApiConstants.Implicit, Implicit, (w, o) => callback(w, o)); + writer.WriteOptionalObject(OpenApiConstants.Implicit, Implicit, callback); // password - writer.WriteOptionalObject(OpenApiConstants.Password, Password, (w, o) => callback(w, o)); + writer.WriteOptionalObject(OpenApiConstants.Password, Password, callback); // clientCredentials writer.WriteOptionalObject( OpenApiConstants.ClientCredentials, ClientCredentials, - (w, o) => callback(w, o)); + callback); // authorizationCode writer.WriteOptionalObject( OpenApiConstants.AuthorizationCode, AuthorizationCode, - (w, o) => callback(w, o)); + callback); // extensions writer.WriteExtensions(Extensions, version); diff --git a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs index 1b637b3c0..f9209f7fa 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs @@ -161,10 +161,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version writer.WriteOptionalCollection( OpenApiConstants.Tags, Tags, - (w, t) => - { - callback(w, t); - }); + callback); // summary writer.WriteProperty(OpenApiConstants.Summary, Summary); @@ -173,31 +170,31 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version writer.WriteProperty(OpenApiConstants.Description, Description); // externalDocs - writer.WriteOptionalObject(OpenApiConstants.ExternalDocs, ExternalDocs, (w, e) => callback(w, e)); + writer.WriteOptionalObject(OpenApiConstants.ExternalDocs, ExternalDocs, callback); // operationId writer.WriteProperty(OpenApiConstants.OperationId, OperationId); // parameters - writer.WriteOptionalCollection(OpenApiConstants.Parameters, Parameters, (w, p) => callback(w, p)); + writer.WriteOptionalCollection(OpenApiConstants.Parameters, Parameters, callback); // requestBody - writer.WriteOptionalObject(OpenApiConstants.RequestBody, RequestBody, (w, r) => callback(w, r)); + writer.WriteOptionalObject(OpenApiConstants.RequestBody, RequestBody, callback); // responses - writer.WriteRequiredObject(OpenApiConstants.Responses, Responses, (w, r) => callback(w, r)); + writer.WriteRequiredObject(OpenApiConstants.Responses, Responses, callback); // callbacks - writer.WriteOptionalMap(OpenApiConstants.Callbacks, Callbacks, (w, c) => callback(w, c)); + writer.WriteOptionalMap(OpenApiConstants.Callbacks, Callbacks, callback); // deprecated writer.WriteProperty(OpenApiConstants.Deprecated, Deprecated, false); // security - writer.WriteOptionalCollection(OpenApiConstants.Security, Security, (w, s) => callback(w, s)); + writer.WriteOptionalCollection(OpenApiConstants.Security, Security, callback); // servers - writer.WriteOptionalCollection(OpenApiConstants.Servers, Servers, (w, s) => callback(w, s)); + writer.WriteOptionalCollection(OpenApiConstants.Servers, Servers, callback); // specification extensions writer.WriteExtensions(Extensions,version); diff --git a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs index 67f703a96..9fad92698 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs @@ -279,16 +279,16 @@ private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpe writer.WriteProperty(OpenApiConstants.AllowReserved, AllowReserved, false); // schema - writer.WriteOptionalObject(OpenApiConstants.Schema, Schema, (w, s) => callback(w, s)); + writer.WriteOptionalObject(OpenApiConstants.Schema, Schema, callback); // example writer.WriteOptionalObject(OpenApiConstants.Example, Example, (w, s) => w.WriteAny(s)); // examples - writer.WriteOptionalMap(OpenApiConstants.Examples, Examples, (w, e) => callback(w, e)); + writer.WriteOptionalMap(OpenApiConstants.Examples, Examples, callback); // content - writer.WriteOptionalMap(OpenApiConstants.Content, Content, (w, c) => callback(w, c)); + writer.WriteOptionalMap(OpenApiConstants.Content, Content, callback); // extensions writer.WriteExtensions(Extensions, version); diff --git a/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs b/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs index 1df4465b1..02e9c2d50 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs @@ -246,14 +246,14 @@ private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpe writer.WriteOptionalObject( operation.Key.GetDisplayName(), operation.Value, - (w, o) => callback(w, o)); + callback); } // servers - writer.WriteOptionalCollection(OpenApiConstants.Servers, Servers, (w, s) => callback(w, s)); + writer.WriteOptionalCollection(OpenApiConstants.Servers, Servers, callback); // parameters - writer.WriteOptionalCollection(OpenApiConstants.Parameters, Parameters, (w, p) => callback(w, p)); + writer.WriteOptionalCollection(OpenApiConstants.Parameters, Parameters, callback); // specification extensions writer.WriteExtensions(Extensions, version); diff --git a/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs b/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs index 771924630..3d5cfdfd5 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs @@ -150,7 +150,7 @@ private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpe writer.WriteProperty(OpenApiConstants.Description, Description); // content - writer.WriteRequiredMap(OpenApiConstants.Content, Content, (w, c) => callback(w, c)); + writer.WriteRequiredMap(OpenApiConstants.Content, Content, callback); // required writer.WriteProperty(OpenApiConstants.Required, Required, false); diff --git a/src/Microsoft.OpenApi/Models/OpenApiResponse.cs b/src/Microsoft.OpenApi/Models/OpenApiResponse.cs index ab9631b68..10ac3de85 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiResponse.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiResponse.cs @@ -156,13 +156,13 @@ private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpe writer.WriteRequiredProperty(OpenApiConstants.Description, Description); // headers - writer.WriteOptionalMap(OpenApiConstants.Headers, Headers, (w, h) => callback(w, h)); + writer.WriteOptionalMap(OpenApiConstants.Headers, Headers, callback); // content - writer.WriteOptionalMap(OpenApiConstants.Content, Content, (w, c) => callback(w, c)); + writer.WriteOptionalMap(OpenApiConstants.Content, Content, callback); // links - writer.WriteOptionalMap(OpenApiConstants.Links, Links, (w, l) => callback(w, l)); + writer.WriteOptionalMap(OpenApiConstants.Links, Links, callback); // extension writer.WriteExtensions(Extensions, version); diff --git a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs index 5b475965c..bc3a7e86a 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs @@ -428,22 +428,22 @@ private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpe writer.WriteProperty(OpenApiConstants.Type, Type); // allOf - writer.WriteOptionalCollection(OpenApiConstants.AllOf, AllOf, (w, s) => callback(w, s)); + writer.WriteOptionalCollection(OpenApiConstants.AllOf, AllOf, callback); // anyOf - writer.WriteOptionalCollection(OpenApiConstants.AnyOf, AnyOf, (w, s) => callback(w, s)); + writer.WriteOptionalCollection(OpenApiConstants.AnyOf, AnyOf, callback); // oneOf - writer.WriteOptionalCollection(OpenApiConstants.OneOf, OneOf, (w, s) => callback(w, s)); + writer.WriteOptionalCollection(OpenApiConstants.OneOf, OneOf, callback); // not - writer.WriteOptionalObject(OpenApiConstants.Not, Not, (w, s) => callback(w, s)); + writer.WriteOptionalObject(OpenApiConstants.Not, Not, callback); // items - writer.WriteOptionalObject(OpenApiConstants.Items, Items, (w, s) => callback(w, s)); + writer.WriteOptionalObject(OpenApiConstants.Items, Items, callback); // properties - writer.WriteOptionalMap(OpenApiConstants.Properties, Properties, (w, s) => callback(w, s)); + writer.WriteOptionalMap(OpenApiConstants.Properties, Properties, callback); // additionalProperties if (AdditionalPropertiesAllowed) @@ -451,7 +451,7 @@ private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpe writer.WriteOptionalObject( OpenApiConstants.AdditionalProperties, AdditionalProperties, - (w, s) => callback(w, s)); + callback); } else { @@ -471,7 +471,7 @@ private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpe writer.WriteProperty(OpenApiConstants.Nullable, Nullable, false); // discriminator - writer.WriteOptionalObject(OpenApiConstants.Discriminator, Discriminator, (w, s) => callback(w, s)); + writer.WriteOptionalObject(OpenApiConstants.Discriminator, Discriminator, callback); // readOnly writer.WriteProperty(OpenApiConstants.ReadOnly, ReadOnly, false); @@ -483,7 +483,7 @@ private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpe writer.WriteOptionalObject(OpenApiConstants.Xml, Xml, (w, s) => s.SerializeAsV2(w)); // externalDocs - writer.WriteOptionalObject(OpenApiConstants.ExternalDocs, ExternalDocs, (w, s) => callback(w, s)); + writer.WriteOptionalObject(OpenApiConstants.ExternalDocs, ExternalDocs, callback); // example writer.WriteOptionalObject(OpenApiConstants.Example, Example, (w, e) => w.WriteAny(e)); diff --git a/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs b/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs index 2f84cf2d3..06fecca13 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs @@ -179,7 +179,7 @@ private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpe case SecuritySchemeType.OAuth2: // This property apply to oauth2 type only. // flows - writer.WriteOptionalObject(OpenApiConstants.Flows, Flows, (w, o) => callback(w, o)); + writer.WriteOptionalObject(OpenApiConstants.Flows, Flows, callback); break; case SecuritySchemeType.OpenIdConnect: // This property apply to openIdConnect only. diff --git a/src/Microsoft.OpenApi/Models/OpenApiServer.cs b/src/Microsoft.OpenApi/Models/OpenApiServer.cs index 6d9339a92..90252bd3f 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiServer.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiServer.cs @@ -87,7 +87,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version writer.WriteProperty(OpenApiConstants.Description, Description); // variables - writer.WriteOptionalMap(OpenApiConstants.Variables, Variables, (w, v) => callback(w, v)); + writer.WriteOptionalMap(OpenApiConstants.Variables, Variables, callback); // specification extensions writer.WriteExtensions(Extensions, version); diff --git a/src/Microsoft.OpenApi/Models/OpenApiTag.cs b/src/Microsoft.OpenApi/Models/OpenApiTag.cs index 23cf1afcd..64e62b062 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiTag.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiTag.cs @@ -125,7 +125,7 @@ private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpe writer.WriteProperty(OpenApiConstants.Description, Description); // external docs - writer.WriteOptionalObject(OpenApiConstants.ExternalDocs, ExternalDocs, (w, e) => callback(w, e)); + writer.WriteOptionalObject(OpenApiConstants.ExternalDocs, ExternalDocs, callback); // extensions. writer.WriteExtensions(Extensions, version); diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecurityRequirementTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecurityRequirementTests.cs index f661c6f42..47c083a0f 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiSecurityRequirementTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiSecurityRequirementTests.cs @@ -150,8 +150,7 @@ public void SerializeSecurityRequirementWithReferencedSecuritySchemeAsV2JsonWork } [Fact] - public void - SerializeSecurityRequirementWithUnreferencedSecuritySchemeAsV3JsonShouldSkipUnserializableKeyValuePair() + public void SerializeSecurityRequirementWithUnreferencedSecuritySchemeAsV3JsonShouldSkipUnserializableKeyValuePair() { // Arrange var expected = @@ -165,8 +164,7 @@ public void }"; // Act - var actual = - SecurityRequirementWithUnreferencedSecurityScheme.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); + var actual = SecurityRequirementWithUnreferencedSecurityScheme.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); // Assert actual = actual.MakeLineBreaksEnvironmentNeutral(); @@ -175,8 +173,7 @@ public void } [Fact] - public void - SerializeSecurityRequirementWithUnreferencedSecuritySchemeAsV2JsonShouldSkipUnserializableKeyValuePair() + public void SerializeSecurityRequirementWithUnreferencedSecuritySchemeAsV2JsonShouldSkipUnserializableKeyValuePair() { // Arrange var expected = From f2b651e4e82dab6f698fea160bb0228099b5426e Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 6 Mar 2023 16:26:19 +0300 Subject: [PATCH 17/20] Refactor to reorder how properties are written for scope to be ended correctly --- src/Microsoft.OpenApi/Models/OpenApiReference.cs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/Microsoft.OpenApi/Models/OpenApiReference.cs b/src/Microsoft.OpenApi/Models/OpenApiReference.cs index ecfa5c0df..aee6d2ead 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiReference.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiReference.cs @@ -149,13 +149,11 @@ public OpenApiReference(OpenApiReference reference) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer); - // summary and description are in 3.1 but not in 3.0 writer.WriteProperty(OpenApiConstants.Summary, Summary); writer.WriteProperty(OpenApiConstants.Description, Description); - - writer.WriteEndObject(); + + SerializeInternal(writer); } /// @@ -164,7 +162,6 @@ public void SerializeAsV31(IOpenApiWriter writer) public void SerializeAsV3(IOpenApiWriter writer) { SerializeInternal(writer); - writer.WriteEndObject(); } /// @@ -192,6 +189,8 @@ private void SerializeInternal(IOpenApiWriter writer) // $ref writer.WriteProperty(OpenApiConstants.DollarRef, ReferenceV3); + + writer.WriteEndObject(); } /// From 82b4c60cdd8bff36aa50afbd04ee6c7c7d19f699 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 7 Mar 2023 16:40:19 +0300 Subject: [PATCH 18/20] Use string comparison; refactor code --- .../Models/OpenApiComponents.cs | 97 +++++++++++-------- 1 file changed, 56 insertions(+), 41 deletions(-) diff --git a/src/Microsoft.OpenApi/Models/OpenApiComponents.cs b/src/Microsoft.OpenApi/Models/OpenApiComponents.cs index ffef8c9c3..9788438f5 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiComponents.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiComponents.cs @@ -102,9 +102,18 @@ public OpenApiComponents(OpenApiComponents components) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer), - (writer, referenceElement) => referenceElement.SerializeAsV31WithoutReference(writer)); + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); + + // If references have been inlined we don't need the to render the components section + // however if they have cycles, then we will need a component rendered + if (writer.GetSettings().InlineLocalReferences) + { + RenderComponents(writer); + return; + } + writer.WriteStartObject(); + // pathItems - only present in v3.1 writer.WriteOptionalMap( OpenApiConstants.PathItems, @@ -122,8 +131,9 @@ public void SerializeAsV31(IOpenApiWriter writer) component.SerializeAsV31(w); } }); - - writer.WriteEndObject(); + + SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer), + (writer, referenceElement) => referenceElement.SerializeAsV31WithoutReference(writer)); } /// @@ -132,9 +142,19 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { + writer = writer ?? throw Error.ArgumentNull(nameof(writer)); + + // If references have been inlined we don't need the to render the components section + // however if they have cycles, then we will need a component rendered + if (writer.GetSettings().InlineLocalReferences) + { + RenderComponents(writer); + return; + } + + writer.WriteStartObject(); SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer), (writer, referenceElement) => referenceElement.SerializeAsV3WithoutReference(writer)); - writer.WriteEndObject(); } /// @@ -143,32 +163,6 @@ public void SerializeAsV3(IOpenApiWriter writer) private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version, Action callback, Action action) { - writer = writer ?? throw Error.ArgumentNull(nameof(writer)); - - // If references have been inlined we don't need the to render the components section - // however if they have cycles, then we will need a component rendered - if (writer.GetSettings().InlineLocalReferences) - { - var loops = writer.GetSettings().LoopDetector.Loops; - writer.WriteStartObject(); - if (loops.TryGetValue(typeof(OpenApiSchema), out List schemas)) - { - var openApiSchemas = schemas.Cast().Distinct().ToList() - .ToDictionary(k => k.Reference.Id); - - writer.WriteOptionalMap( - OpenApiConstants.Schemas, - Schemas, - (w, key, component) => { - action(w, component); - }); - } - writer.WriteEndObject(); - return; - } - - writer.WriteStartObject(); - // Serialize each referenceable object as full object without reference if the reference in the object points to itself. // If the reference exists but points to other objects, the object is serialized to just that reference. @@ -180,7 +174,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version { if (component.Reference != null && component.Reference.Type == ReferenceType.Schema && - component.Reference.Id == key) + string.Equals(component.Reference.Id, key, StringComparison.OrdinalIgnoreCase)) { action(w, component); } @@ -198,7 +192,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version { if (component.Reference != null && component.Reference.Type == ReferenceType.Response && - component.Reference.Id == key) + string.Equals(component.Reference.Id, key, StringComparison.OrdinalIgnoreCase)) { action(w, component); } @@ -216,7 +210,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version { if (component.Reference != null && component.Reference.Type == ReferenceType.Parameter && - component.Reference.Id == key) + string.Equals(component.Reference.Id, key, StringComparison.OrdinalIgnoreCase)) { action(w, component); } @@ -234,7 +228,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version { if (component.Reference != null && component.Reference.Type == ReferenceType.Example && - component.Reference.Id == key) + string.Equals(component.Reference.Id, key, StringComparison.OrdinalIgnoreCase)) { action(writer, component); } @@ -251,8 +245,9 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version (w, key, component) => { if (component.Reference != null && - component.Reference.Type == ReferenceType.RequestBody && - component.Reference.Id == key) + component.Reference.Type == ReferenceType.RequestBody && + string.Equals(component.Reference.Id, key, StringComparison.OrdinalIgnoreCase)) + { action(w, component); } @@ -270,7 +265,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version { if (component.Reference != null && component.Reference.Type == ReferenceType.Header && - component.Reference.Id == key) + string.Equals(component.Reference.Id, key, StringComparison.OrdinalIgnoreCase)) { action(w, component); } @@ -288,7 +283,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version { if (component.Reference != null && component.Reference.Type == ReferenceType.SecurityScheme && - component.Reference.Id == key) + string.Equals(component.Reference.Id, key, StringComparison.OrdinalIgnoreCase)) { action(w, component); } @@ -306,7 +301,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version { if (component.Reference != null && component.Reference.Type == ReferenceType.Link && - component.Reference.Id == key) + string.Equals(component.Reference.Id, key, StringComparison.OrdinalIgnoreCase)) { action(w, component); } @@ -324,7 +319,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version { if (component.Reference != null && component.Reference.Type == ReferenceType.Callback && - component.Reference.Id == key) + string.Equals(component.Reference.Id, key, StringComparison.OrdinalIgnoreCase)) { action(w, component); } @@ -336,8 +331,28 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version // extensions writer.WriteExtensions(Extensions, version); + writer.WriteEndObject(); } + private void RenderComponents(IOpenApiWriter writer) + { + var loops = writer.GetSettings().LoopDetector.Loops; + writer.WriteStartObject(); + if (loops.TryGetValue(typeof(OpenApiSchema), out List schemas)) + { + var openApiSchemas = schemas.Cast().Distinct().ToList() + .ToDictionary(k => k.Reference.Id); + + writer.WriteOptionalMap( + OpenApiConstants.Schemas, + Schemas, + (w, key, component) => { + component.SerializeAsV31WithoutReference(w); + }); + } + writer.WriteEndObject(); + } + /// /// Serialize to Open Api v2.0. /// From 7d7e056ee91b0b8169c43cb783c25b59469a4e41 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 7 Mar 2023 16:40:45 +0300 Subject: [PATCH 19/20] Fix failing test and update public API surface --- .../Models/OpenApiComponentsTests.cs | 64 +++++++++---------- .../PublicApi/PublicApi.approved.txt | 37 ++++------- 2 files changed, 44 insertions(+), 57 deletions(-) diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiComponentsTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiComponentsTests.cs index 86e856d5d..7c6365ce4 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiComponentsTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiComponentsTests.cs @@ -669,25 +669,6 @@ public void SerializeComponentsWithPathItemsAsJsonWorks() { // Arrange var expected = @"{ - ""schemas"": { - ""schema1"": { - ""properties"": { - ""property2"": { - ""type"": ""integer"" - }, - ""property3"": { - ""$ref"": ""#/components/schemas/schema2"" - } - } - }, - ""schema2"": { - ""properties"": { - ""property2"": { - ""type"": ""integer"" - } - } - } - }, ""pathItems"": { ""/pets"": { ""post"": { @@ -708,6 +689,25 @@ public void SerializeComponentsWithPathItemsAsJsonWorks() } } } + }, + ""schemas"": { + ""schema1"": { + ""properties"": { + ""property2"": { + ""type"": ""integer"" + }, + ""property3"": { + ""$ref"": ""#/components/schemas/schema2"" + } + } + }, + ""schema2"": { + ""properties"": { + ""property2"": { + ""type"": ""integer"" + } + } + } } }"; // Act @@ -723,18 +723,7 @@ public void SerializeComponentsWithPathItemsAsJsonWorks() public void SerializeComponentsWithPathItemsAsYamlWorks() { // Arrange - var expected = @"schemas: - schema1: - properties: - property2: - type: integer - property3: - $ref: '#/components/schemas/schema2' - schema2: - properties: - property2: - type: integer -pathItems: + var expected = @"pathItems: /pets: post: requestBody: @@ -745,7 +734,18 @@ public void SerializeComponentsWithPathItemsAsYamlWorks() $ref: '#/components/schemas/schema1' responses: '200': - description: Return a 200 status to indicate that the data was received successfully"; + description: Return a 200 status to indicate that the data was received successfully +schemas: + schema1: + properties: + property2: + type: integer + property3: + $ref: '#/components/schemas/schema2' + schema2: + properties: + property2: + type: integer"; // Act var actual = ComponentsWithPathItem.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_1); diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt index 75edc98ea..5c14ab394 100755 --- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt +++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt @@ -308,6 +308,7 @@ namespace Microsoft.OpenApi.Interfaces Microsoft.OpenApi.Models.OpenApiReference Reference { get; set; } bool UnresolvedReference { get; set; } void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer); + void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer); void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer); } public interface IOpenApiSerializable : Microsoft.OpenApi.Interfaces.IOpenApiElement @@ -350,11 +351,11 @@ namespace Microsoft.OpenApi.Models public bool UnresolvedReference { get; set; } public void AddPathItem(Microsoft.OpenApi.Expressions.RuntimeExpression expression, Microsoft.OpenApi.Models.OpenApiPathItem pathItem) { } public Microsoft.OpenApi.Models.OpenApiCallback GetEffective(Microsoft.OpenApi.Models.OpenApiDocument doc) { } - public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiComponents : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable @@ -372,7 +373,6 @@ namespace Microsoft.OpenApi.Models public System.Collections.Generic.IDictionary Responses { get; set; } public System.Collections.Generic.IDictionary Schemas { get; set; } public System.Collections.Generic.IDictionary SecuritySchemes { get; set; } - public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } @@ -527,7 +527,6 @@ namespace Microsoft.OpenApi.Models public OpenApiDiscriminator(Microsoft.OpenApi.Models.OpenApiDiscriminator discriminator) { } public System.Collections.Generic.IDictionary Mapping { get; set; } public string PropertyName { get; set; } - public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } @@ -550,7 +549,6 @@ namespace Microsoft.OpenApi.Models public Microsoft.OpenApi.Services.OpenApiWorkspace Workspace { get; set; } public Microsoft.OpenApi.Interfaces.IOpenApiReferenceable ResolveReference(Microsoft.OpenApi.Models.OpenApiReference reference) { } public System.Collections.Generic.IEnumerable ResolveReferences() { } - public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } @@ -566,7 +564,6 @@ namespace Microsoft.OpenApi.Models public System.Collections.Generic.IDictionary Extensions { get; set; } public System.Collections.Generic.IDictionary Headers { get; set; } public Microsoft.OpenApi.Models.ParameterStyle? Style { get; set; } - public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } @@ -592,11 +589,11 @@ namespace Microsoft.OpenApi.Models public bool UnresolvedReference { get; set; } public Microsoft.OpenApi.Any.IOpenApiAny Value { get; set; } public Microsoft.OpenApi.Models.OpenApiExample GetEffective(Microsoft.OpenApi.Models.OpenApiDocument doc) { } - public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public abstract class OpenApiExtensibleDictionary : System.Collections.Generic.Dictionary, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable @@ -605,7 +602,6 @@ namespace Microsoft.OpenApi.Models protected OpenApiExtensibleDictionary() { } protected OpenApiExtensibleDictionary(System.Collections.Generic.Dictionary dictionary = null, System.Collections.Generic.IDictionary extensions = null) { } public System.Collections.Generic.IDictionary Extensions { get; set; } - public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } @@ -640,11 +636,11 @@ namespace Microsoft.OpenApi.Models public Microsoft.OpenApi.Models.ParameterStyle? Style { get; set; } public bool UnresolvedReference { get; set; } public Microsoft.OpenApi.Models.OpenApiHeader GetEffective(Microsoft.OpenApi.Models.OpenApiDocument doc) { } - public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiInfo : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable @@ -659,7 +655,6 @@ namespace Microsoft.OpenApi.Models public System.Uri TermsOfService { get; set; } public string Title { get; set; } public string Version { get; set; } - public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } @@ -690,11 +685,11 @@ namespace Microsoft.OpenApi.Models public Microsoft.OpenApi.Models.OpenApiServer Server { get; set; } public bool UnresolvedReference { get; set; } public Microsoft.OpenApi.Models.OpenApiLink GetEffective(Microsoft.OpenApi.Models.OpenApiDocument doc) { } - public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiMediaType : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable @@ -706,7 +701,6 @@ namespace Microsoft.OpenApi.Models public System.Collections.Generic.IDictionary Examples { get; set; } public System.Collections.Generic.IDictionary Extensions { get; set; } public Microsoft.OpenApi.Models.OpenApiSchema Schema { get; set; } - public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } @@ -720,7 +714,6 @@ namespace Microsoft.OpenApi.Models public System.Uri RefreshUrl { get; set; } public System.Collections.Generic.IDictionary Scopes { get; set; } public System.Uri TokenUrl { get; set; } - public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } @@ -734,7 +727,6 @@ namespace Microsoft.OpenApi.Models public System.Collections.Generic.IDictionary Extensions { get; set; } public Microsoft.OpenApi.Models.OpenApiOAuthFlow Implicit { get; set; } public Microsoft.OpenApi.Models.OpenApiOAuthFlow Password { get; set; } - public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } @@ -757,7 +749,6 @@ namespace Microsoft.OpenApi.Models public System.Collections.Generic.IList Servers { get; set; } public string Summary { get; set; } public System.Collections.Generic.IList Tags { get; set; } - public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } @@ -784,11 +775,11 @@ namespace Microsoft.OpenApi.Models public Microsoft.OpenApi.Models.ParameterStyle? Style { get; set; } public bool UnresolvedReference { get; set; } public Microsoft.OpenApi.Models.OpenApiParameter GetEffective(Microsoft.OpenApi.Models.OpenApiDocument doc) { } - public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiPathItem : Microsoft.OpenApi.Interfaces.IEffective, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable @@ -805,11 +796,11 @@ namespace Microsoft.OpenApi.Models public bool UnresolvedReference { get; set; } public void AddOperation(Microsoft.OpenApi.Models.OperationType operationType, Microsoft.OpenApi.Models.OpenApiOperation operation) { } public Microsoft.OpenApi.Models.OpenApiPathItem GetEffective(Microsoft.OpenApi.Models.OpenApiDocument doc) { } - public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiPaths : Microsoft.OpenApi.Models.OpenApiExtensibleDictionary @@ -831,7 +822,6 @@ namespace Microsoft.OpenApi.Models public string ReferenceV3 { get; } public string Summary { get; set; } public Microsoft.OpenApi.Models.ReferenceType? Type { get; set; } - public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } @@ -847,11 +837,11 @@ namespace Microsoft.OpenApi.Models public bool Required { get; set; } public bool UnresolvedReference { get; set; } public Microsoft.OpenApi.Models.OpenApiRequestBody GetEffective(Microsoft.OpenApi.Models.OpenApiDocument doc) { } - public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiResponse : Microsoft.OpenApi.Interfaces.IEffective, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable @@ -866,11 +856,11 @@ namespace Microsoft.OpenApi.Models public Microsoft.OpenApi.Models.OpenApiReference Reference { get; set; } public bool UnresolvedReference { get; set; } public Microsoft.OpenApi.Models.OpenApiResponse GetEffective(Microsoft.OpenApi.Models.OpenApiDocument doc) { } - public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiResponses : Microsoft.OpenApi.Models.OpenApiExtensibleDictionary @@ -922,17 +912,16 @@ namespace Microsoft.OpenApi.Models public bool WriteOnly { get; set; } public Microsoft.OpenApi.Models.OpenApiXml Xml { get; set; } public Microsoft.OpenApi.Models.OpenApiSchema GetEffective(Microsoft.OpenApi.Models.OpenApiDocument doc) { } - public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiSecurityRequirement : System.Collections.Generic.Dictionary>, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiSerializable { public OpenApiSecurityRequirement() { } - public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } @@ -952,11 +941,11 @@ namespace Microsoft.OpenApi.Models public string Scheme { get; set; } public Microsoft.OpenApi.Models.SecuritySchemeType Type { get; set; } public bool UnresolvedReference { get; set; } - public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiServer : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable @@ -967,7 +956,6 @@ namespace Microsoft.OpenApi.Models public System.Collections.Generic.IDictionary Extensions { get; set; } public string Url { get; set; } public System.Collections.Generic.IDictionary Variables { get; set; } - public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } @@ -980,7 +968,6 @@ namespace Microsoft.OpenApi.Models public string Description { get; set; } public System.Collections.Generic.List Enum { get; set; } public System.Collections.Generic.IDictionary Extensions { get; set; } - public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } @@ -995,11 +982,11 @@ namespace Microsoft.OpenApi.Models public string Name { get; set; } public Microsoft.OpenApi.Models.OpenApiReference Reference { get; set; } public bool UnresolvedReference { get; set; } - public void Serialize(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV2WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } + public void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } } public class OpenApiXml : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable From 06f91f636b4a52b77be03948562fcf0083e558e4 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 7 Mar 2023 09:06:52 -0500 Subject: [PATCH 20/20] Apply suggestions from code review --- src/Microsoft.OpenApi/Models/OpenApiComponents.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi/Models/OpenApiComponents.cs b/src/Microsoft.OpenApi/Models/OpenApiComponents.cs index 9788438f5..550248210 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiComponents.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiComponents.cs @@ -340,13 +340,11 @@ private void RenderComponents(IOpenApiWriter writer) writer.WriteStartObject(); if (loops.TryGetValue(typeof(OpenApiSchema), out List schemas)) { - var openApiSchemas = schemas.Cast().Distinct().ToList() - .ToDictionary(k => k.Reference.Id); writer.WriteOptionalMap( OpenApiConstants.Schemas, Schemas, - (w, key, component) => { + static (w, key, component) => { component.SerializeAsV31WithoutReference(w); }); }