diff --git a/src/Microsoft.OpenApi.Readers/ParseNodes/AnyListFieldMapParameter.cs b/src/Microsoft.OpenApi.Readers/ParseNodes/AnyListFieldMapParameter.cs
index 794ab3cdf..667ce16ee 100644
--- a/src/Microsoft.OpenApi.Readers/ParseNodes/AnyListFieldMapParameter.cs
+++ b/src/Microsoft.OpenApi.Readers/ParseNodes/AnyListFieldMapParameter.cs
@@ -3,7 +3,6 @@
using System;
using System.Collections.Generic;
-using System.Text.Json.Nodes;
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Models;
diff --git a/src/Microsoft.OpenApi/Models/OpenApiCallback.cs b/src/Microsoft.OpenApi/Models/OpenApiCallback.cs
index f8a04bf85..dce353849 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiCallback.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiCallback.cs
@@ -7,7 +7,6 @@
using Microsoft.OpenApi.Expressions;
using Microsoft.OpenApi.Interfaces;
using Microsoft.OpenApi.Writers;
-using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions;
namespace Microsoft.OpenApi.Models
{
@@ -19,13 +18,13 @@ public class OpenApiCallback : IOpenApiSerializable, IOpenApiReferenceable, IOpe
///
/// A Path Item Object used to define a callback request and expected responses.
///
- public Dictionary PathItems { get; set; }
+ public virtual Dictionary PathItems { get; set; }
= new Dictionary();
///
/// Indicates if object is populated with data or is just a reference to the data
///
- public bool UnresolvedReference { get; set; }
+ public virtual bool UnresolvedReference { get; set; }
///
/// Reference pointer.
@@ -35,7 +34,7 @@ public class OpenApiCallback : IOpenApiSerializable, IOpenApiReferenceable, IOpe
///
/// This object MAY be extended with Specification Extensions.
///
- public IDictionary Extensions { get; set; } = new Dictionary();
+ public virtual IDictionary Extensions { get; set; } = new Dictionary();
///
/// Parameter-less constructor
@@ -83,7 +82,7 @@ public void AddPathItem(RuntimeExpression expression, OpenApiPathItem pathItem)
///
///
///
- public void SerializeAsV31(IOpenApiWriter writer)
+ public virtual void SerializeAsV31(IOpenApiWriter writer)
{
SerializeInternal(writer, (writer, element) => element.SerializeAsV31(writer),
(writer, referenceElement) => referenceElement.SerializeAsV31WithoutReference(writer));
@@ -92,7 +91,7 @@ public void SerializeAsV31(IOpenApiWriter writer)
///
/// Serialize to Open Api v3.0
///
- public void SerializeAsV3(IOpenApiWriter writer)
+ public virtual void SerializeAsV3(IOpenApiWriter writer)
{
SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer),
(writer, referenceElement) => referenceElement.SerializeAsV3WithoutReference(writer));
@@ -111,7 +110,7 @@ private void SerializeInternal(IOpenApiWriter writer,
writer = writer ?? throw Error.ArgumentNull(nameof(writer));
var target = this;
-
+
if (Reference != null)
{
if (!writer.GetSettings().ShouldInlineReference(Reference))
@@ -124,6 +123,7 @@ private void SerializeInternal(IOpenApiWriter writer,
target = GetEffective(Reference.HostDocument);
}
}
+
action(writer, target);
}
@@ -134,9 +134,9 @@ private void SerializeInternal(IOpenApiWriter writer,
/// OpenApiCallback
public OpenApiCallback GetEffective(OpenApiDocument doc)
{
- if (this.Reference != null)
+ if (Reference != null)
{
- return doc.ResolveReferenceTo(this.Reference);
+ return doc.ResolveReferenceTo(Reference);
}
else
{
@@ -147,7 +147,7 @@ public OpenApiCallback GetEffective(OpenApiDocument doc)
///
/// Serialize to OpenAPI V31 document without using reference.
///
- public void SerializeAsV31WithoutReference(IOpenApiWriter writer)
+ public virtual void SerializeAsV31WithoutReference(IOpenApiWriter writer)
{
SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1,
(writer, element) => element.SerializeAsV31(writer));
@@ -156,13 +156,13 @@ public void SerializeAsV31WithoutReference(IOpenApiWriter writer)
///
/// Serialize to OpenAPI V3 document without using reference.
///
- public void SerializeAsV3WithoutReference(IOpenApiWriter writer)
+ public virtual void SerializeAsV3WithoutReference(IOpenApiWriter writer)
{
SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0,
(writer, element) => element.SerializeAsV3(writer));
}
-
- private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version,
+
+ internal void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version,
Action callback)
{
writer.WriteStartObject();
diff --git a/src/Microsoft.OpenApi/Models/OpenApiComponents.cs b/src/Microsoft.OpenApi/Models/OpenApiComponents.cs
index a527342db..7b56745cd 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiComponents.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiComponents.cs
@@ -16,60 +16,60 @@ public class OpenApiComponents : IOpenApiSerializable, IOpenApiExtensible
///
/// An object to hold reusable Objects.
///
- public IDictionary Schemas { get; set; } = new Dictionary();
+ public virtual IDictionary Schemas { get; set; } = new Dictionary();
///
/// An object to hold reusable Objects.
///
- public IDictionary Responses { get; set; } = new Dictionary();
+ public virtual IDictionary Responses { get; set; } = new Dictionary();
///
/// An object to hold reusable Objects.
///
- public IDictionary Parameters { get; set; } =
+ public virtual IDictionary Parameters { get; set; } =
new Dictionary();
///
/// An object to hold reusable Objects.
///
- public IDictionary Examples { get; set; } = new Dictionary();
+ public virtual IDictionary Examples { get; set; } = new Dictionary();
///
/// An object to hold reusable Objects.
///
- public IDictionary RequestBodies { get; set; } =
+ public virtual IDictionary RequestBodies { get; set; } =
new Dictionary();
///
/// An object to hold reusable Objects.
///
- public IDictionary Headers { get; set; } = new Dictionary();
+ public virtual IDictionary Headers { get; set; } = new Dictionary();
///
/// An object to hold reusable Objects.
///
- public IDictionary SecuritySchemes { get; set; } =
+ public virtual IDictionary SecuritySchemes { get; set; } =
new Dictionary();
///
/// An object to hold reusable Objects.
///
- public IDictionary Links { get; set; } = new Dictionary();
+ public virtual IDictionary Links { get; set; } = new Dictionary();
///
/// An object to hold reusable Objects.
///
- public IDictionary Callbacks { get; set; } = new Dictionary();
+ public virtual IDictionary Callbacks { get; set; } = new Dictionary();
///
/// An object to hold reusable Object.
///
- public IDictionary PathItems { get; set; } = new Dictionary();
+ public virtual IDictionary PathItems { get; set; } = new Dictionary();
///
/// This object MAY be extended with Specification Extensions.
///
- public IDictionary Extensions { get; set; } = new Dictionary();
+ public virtual IDictionary Extensions { get; set; } = new Dictionary();
///
/// Parameter-less constructor
diff --git a/src/Microsoft.OpenApi/Models/OpenApiContact.cs b/src/Microsoft.OpenApi/Models/OpenApiContact.cs
index 4ecd1332a..801fbb0c4 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiContact.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiContact.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;
diff --git a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs
index 4c9e5da35..6e3672941 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs
@@ -12,7 +12,6 @@
using Microsoft.OpenApi.Interfaces;
using Microsoft.OpenApi.Services;
using Microsoft.OpenApi.Writers;
-using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions;
namespace Microsoft.OpenApi.Models
{
diff --git a/src/Microsoft.OpenApi/Models/OpenApiExample.cs b/src/Microsoft.OpenApi/Models/OpenApiExample.cs
index 853883f04..06870b2ae 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiExample.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiExample.cs
@@ -18,20 +18,20 @@ public class OpenApiExample : IOpenApiSerializable, IOpenApiReferenceable, IOpen
///
/// Short description for the example.
///
- public string Summary { get; set; }
+ public virtual string Summary { get; set; }
///
/// Long description for the example.
/// CommonMark syntax MAY be used for rich text representation.
///
- public string Description { get; set; }
+ public virtual string Description { get; set; }
///
/// Embedded literal example. The value field and externalValue field are mutually
/// exclusive. To represent examples of media types that cannot naturally represented
/// in JSON or YAML, use a string value to contain the example, escaping where necessary.
///
- public OpenApiAny Value { get; set; }
+ public virtual OpenApiAny Value { get; set; }
///
/// A URL that points to the literal example.
@@ -39,22 +39,22 @@ public class OpenApiExample : IOpenApiSerializable, IOpenApiReferenceable, IOpen
/// included in JSON or YAML documents.
/// The value field and externalValue field are mutually exclusive.
///
- public string ExternalValue { get; set; }
+ public virtual string ExternalValue { get; set; }
///
/// This object MAY be extended with Specification Extensions.
///
- public IDictionary Extensions { get; set; } = new Dictionary();
+ public virtual IDictionary Extensions { get; set; } = new Dictionary();
///
/// Reference object.
///
- public OpenApiReference Reference { get; set; }
+ public virtual OpenApiReference Reference { get; set; }
///
/// Indicates object is a placeholder reference to an actual object and does not contain valid data.
///
- public bool UnresolvedReference { get; set; } = false;
+ public virtual bool UnresolvedReference { get; set; } = false;
///
/// Parameter-less constructor
@@ -79,7 +79,7 @@ public OpenApiExample(OpenApiExample example)
/// Serialize to Open Api v3.1
///
///
- public void SerializeAsV31(IOpenApiWriter writer)
+ public virtual void SerializeAsV31(IOpenApiWriter writer)
{
SerializeInternal(writer, (writer, element) => element.SerializeAsV31(writer),
(writer, element) => element.SerializeAsV31WithoutReference(writer));
@@ -89,13 +89,13 @@ public void SerializeAsV31(IOpenApiWriter writer)
/// Serialize to Open Api v3.0
///
///
- public void SerializeAsV3(IOpenApiWriter writer)
+ public virtual void SerializeAsV3(IOpenApiWriter writer)
{
SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer),
(writer, element) => element.SerializeAsV3WithoutReference(writer));
}
- private void SerializeInternal(IOpenApiWriter writer, Action callback,
+ internal virtual void SerializeInternal(IOpenApiWriter writer, Action callback,
Action action)
{
writer = writer ?? throw Error.ArgumentNull(nameof(writer));
@@ -124,7 +124,7 @@ private void SerializeInternal(IOpenApiWriter writer, ActionOpenApiExample
public OpenApiExample GetEffective(OpenApiDocument doc)
{
- if (this.Reference != null)
+ if (Reference != null)
{
return doc.ResolveReferenceTo(this.Reference);
}
@@ -137,7 +137,7 @@ public OpenApiExample GetEffective(OpenApiDocument doc)
///
/// Serialize to OpenAPI V31 example without using reference.
///
- public void SerializeAsV31WithoutReference(IOpenApiWriter writer)
+ public virtual void SerializeAsV31WithoutReference(IOpenApiWriter writer)
{
SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1);
}
@@ -145,12 +145,12 @@ public void SerializeAsV31WithoutReference(IOpenApiWriter writer)
///
/// Serialize to OpenAPI V3 example without using reference.
///
- public void SerializeAsV3WithoutReference(IOpenApiWriter writer)
+ public virtual void SerializeAsV3WithoutReference(IOpenApiWriter writer)
{
SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0);
}
- private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version)
+ internal 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 447e6f1c2..3539401e0 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs
@@ -6,7 +6,6 @@
using System.Text.Json.Nodes;
using Microsoft.OpenApi.Interfaces;
using Microsoft.OpenApi.Writers;
-using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions;
namespace Microsoft.OpenApi.Models
{
diff --git a/src/Microsoft.OpenApi/Models/OpenApiExternalDocs.cs b/src/Microsoft.OpenApi/Models/OpenApiExternalDocs.cs
index b330a966d..66a248b31 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiExternalDocs.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiExternalDocs.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;
diff --git a/src/Microsoft.OpenApi/Models/OpenApiHeader.cs b/src/Microsoft.OpenApi/Models/OpenApiHeader.cs
index bbb9ac7c5..bd4a9ee44 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiHeader.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiHeader.cs
@@ -20,7 +20,7 @@ public class OpenApiHeader : IOpenApiSerializable, IOpenApiReferenceable, IOpenA
///
/// Indicates if object is populated with data or is just a reference to the data
///
- public bool UnresolvedReference { get; set; }
+ public virtual bool UnresolvedReference { get; set; }
///
/// Reference pointer.
@@ -30,63 +30,63 @@ public class OpenApiHeader : IOpenApiSerializable, IOpenApiReferenceable, IOpenA
///
/// A brief description of the header.
///
- public string Description { get; set; }
+ public virtual string Description { get; set; }
///
/// Determines whether this header is mandatory.
///
- public bool Required { get; set; }
+ public virtual bool Required { get; set; }
///
/// Specifies that a header is deprecated and SHOULD be transitioned out of usage.
///
- public bool Deprecated { get; set; }
+ public virtual bool Deprecated { get; set; }
///
/// Sets the ability to pass empty-valued headers.
///
- public bool AllowEmptyValue { get; set; }
+ public virtual bool AllowEmptyValue { get; set; }
///
/// Describes how the header value will be serialized depending on the type of the header value.
///
- public ParameterStyle? Style { get; set; }
+ public virtual ParameterStyle? Style { get; set; }
///
/// When this is true, header values of type array or object generate separate parameters
/// for each value of the array or key-value pair of the map.
///
- public bool Explode { get; set; }
+ public virtual bool Explode { get; set; }
///
/// Determines whether the header value SHOULD allow reserved characters, as defined by RFC3986.
///
- public bool AllowReserved { get; set; }
+ public virtual bool AllowReserved { get; set; }
///
/// The schema defining the type used for the header.
///
- public OpenApiSchema Schema { get; set; }
+ public virtual OpenApiSchema Schema { get; set; }
///
/// Example of the media type.
///
- public OpenApiAny Example { get; set; }
+ public virtual OpenApiAny Example { get; set; }
///
/// Examples of the media type.
///
- public IDictionary Examples { get; set; } = new Dictionary();
+ public virtual IDictionary Examples { get; set; } = new Dictionary();
///
/// A map containing the representations for the header.
///
- public IDictionary Content { get; set; } = new Dictionary();
+ public virtual IDictionary Content { get; set; } = new Dictionary();
///
/// This object MAY be extended with Specification Extensions.
///
- public IDictionary Extensions { get; set; } = new Dictionary();
+ public virtual IDictionary Extensions { get; set; } = new Dictionary();
///
/// Parameter-less constructor
@@ -117,7 +117,7 @@ public OpenApiHeader(OpenApiHeader header)
///
/// Serialize to Open Api v3.1
///
- public void SerializeAsV31(IOpenApiWriter writer)
+ public virtual void SerializeAsV31(IOpenApiWriter writer)
{
SerializeInternal(writer, (writer, element) => element.SerializeAsV31(writer),
(writer, element) => element.SerializeAsV31WithoutReference(writer));
@@ -126,7 +126,7 @@ public void SerializeAsV31(IOpenApiWriter writer)
///
/// Serialize to Open Api v3.0
///
- public void SerializeAsV3(IOpenApiWriter writer)
+ public virtual void SerializeAsV3(IOpenApiWriter writer)
{
SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer),
(writer, element) => element.SerializeAsV3WithoutReference(writer));
@@ -162,9 +162,9 @@ private void SerializeInternal(IOpenApiWriter writer, ActionOpenApiHeader
public OpenApiHeader GetEffective(OpenApiDocument doc)
{
- if (this.Reference != null)
+ if (Reference != null)
{
- return doc.ResolveReferenceTo(this.Reference);
+ return doc.ResolveReferenceTo(Reference);
}
else
{
@@ -175,7 +175,7 @@ public OpenApiHeader GetEffective(OpenApiDocument doc)
///
/// Serialize to OpenAPI V31 document without using reference.
///
- public void SerializeAsV31WithoutReference(IOpenApiWriter writer)
+ public virtual void SerializeAsV31WithoutReference(IOpenApiWriter writer)
{
SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1,
(writer, element) => element.SerializeAsV31(writer));
@@ -184,13 +184,13 @@ public void SerializeAsV31WithoutReference(IOpenApiWriter writer)
///
/// Serialize to OpenAPI V3 document without using reference.
///
- public void SerializeAsV3WithoutReference(IOpenApiWriter writer)
+ public virtual void SerializeAsV3WithoutReference(IOpenApiWriter writer)
{
SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0,
(writer, element) => element.SerializeAsV3(writer));
}
- private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version,
+ internal virtual 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 3b075c708..1ed93275e 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiInfo.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiInfo.cs
@@ -6,7 +6,6 @@
using System.Text.Json.Nodes;
using Microsoft.OpenApi.Interfaces;
using Microsoft.OpenApi.Writers;
-using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions;
namespace Microsoft.OpenApi.Models
{
diff --git a/src/Microsoft.OpenApi/Models/OpenApiLink.cs b/src/Microsoft.OpenApi/Models/OpenApiLink.cs
index 001c57b8f..e9435e3ee 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiLink.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiLink.cs
@@ -3,7 +3,6 @@
using System;
using System.Collections.Generic;
-using System.Text.Json.Nodes;
using Microsoft.OpenApi.Interfaces;
using Microsoft.OpenApi.Writers;
@@ -18,44 +17,44 @@ public class OpenApiLink : IOpenApiSerializable, IOpenApiReferenceable, IOpenApi
/// A relative or absolute reference to an OAS operation.
/// This field is mutually exclusive of the operationId field, and MUST point to an Operation Object.
///
- public string OperationRef { get; set; }
+ public virtual string OperationRef { get; set; }
///
/// The name of an existing, resolvable OAS operation, as defined with a unique operationId.
/// This field is mutually exclusive of the operationRef field.
///
- public string OperationId { get; set; }
+ public virtual string OperationId { get; set; }
///
/// A map representing parameters to pass to an operation as specified with operationId or identified via operationRef.
///
- public Dictionary Parameters { get; set; } =
+ public virtual Dictionary Parameters { get; set; } =
new Dictionary();
///
/// A literal value or {expression} to use as a request body when calling the target operation.
///
- public RuntimeExpressionAnyWrapper RequestBody { get; set; }
+ public virtual RuntimeExpressionAnyWrapper RequestBody { get; set; }
///
/// A description of the link.
///
- public string Description { get; set; }
+ public virtual string Description { get; set; }
///
/// A server object to be used by the target operation.
///
- public OpenApiServer Server { get; set; }
+ public virtual OpenApiServer Server { get; set; }
///
/// This object MAY be extended with Specification Extensions.
///
- public IDictionary Extensions { get; set; } = new Dictionary();
+ public virtual IDictionary Extensions { get; set; } = new Dictionary();
///
/// Indicates if object is populated with data or is just a reference to the data
///
- public bool UnresolvedReference { get; set; }
+ public virtual bool UnresolvedReference { get; set; }
///
/// Reference pointer.
@@ -86,7 +85,7 @@ public OpenApiLink(OpenApiLink link)
///
/// Serialize to Open Api v3.1
///
- public void SerializeAsV31(IOpenApiWriter writer)
+ public virtual void SerializeAsV31(IOpenApiWriter writer)
{
SerializeInternal(writer, (writer, element) => element.SerializeAsV31(writer),
(writer, element) => element.SerializeAsV31WithoutReference(writer));
@@ -95,12 +94,12 @@ public void SerializeAsV31(IOpenApiWriter writer)
///
/// Serialize to Open Api v3.0
///
- public void SerializeAsV3(IOpenApiWriter writer)
+ public virtual void SerializeAsV3(IOpenApiWriter writer)
{
SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer),
(writer, element) => element.SerializeAsV3WithoutReference(writer));
}
-
+
private void SerializeInternal(IOpenApiWriter writer, Action callback,
Action action)
{
@@ -130,9 +129,9 @@ private void SerializeInternal(IOpenApiWriter writer, ActionOpenApiLink
public OpenApiLink GetEffective(OpenApiDocument doc)
{
- if (this.Reference != null)
+ if (Reference != null)
{
- return doc.ResolveReferenceTo(this.Reference);
+ return doc.ResolveReferenceTo(Reference);
}
else
{
@@ -143,7 +142,7 @@ public OpenApiLink GetEffective(OpenApiDocument doc)
///
/// Serialize to OpenAPI V31 document without using reference.
///
- public void SerializeAsV31WithoutReference(IOpenApiWriter writer)
+ public virtual void SerializeAsV31WithoutReference(IOpenApiWriter writer)
{
SerializeInternalWithoutReference(writer, (writer, element) => element.SerializeAsV31(writer));
}
@@ -151,12 +150,12 @@ public void SerializeAsV31WithoutReference(IOpenApiWriter writer)
///
/// Serialize to OpenAPI V3 document without using reference.
///
- public void SerializeAsV3WithoutReference(IOpenApiWriter writer)
+ public virtual void SerializeAsV3WithoutReference(IOpenApiWriter writer)
{
SerializeInternalWithoutReference(writer, (writer, element) => element.SerializeAsV3(writer));
}
- private void SerializeInternalWithoutReference(IOpenApiWriter writer, Action callback)
+ internal virtual void SerializeInternalWithoutReference(IOpenApiWriter writer, Action callback)
{
writer.WriteStartObject();
diff --git a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlow.cs b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlow.cs
index 0a7a55b39..2ba2272aa 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlow.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlow.cs
@@ -1,9 +1,8 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
+// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
using System;
using System.Collections.Generic;
-using System.Text.Json.Nodes;
using Microsoft.OpenApi.Interfaces;
using Microsoft.OpenApi.Writers;
diff --git a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs
index ae8f8440a..6266b5b2d 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs
@@ -1,9 +1,8 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
+// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
using System;
using System.Collections.Generic;
-using System.Text.Json.Nodes;
using Microsoft.OpenApi.Interfaces;
using Microsoft.OpenApi.Writers;
diff --git a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs
index 7552a2e2b..4a9923cef 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiParameter.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;
@@ -22,7 +22,7 @@ public class OpenApiParameter : IOpenApiSerializable, IOpenApiReferenceable, IEf
///
/// Indicates if object is populated with data or is just a reference to the data
///
- public bool UnresolvedReference { get; set; }
+ public virtual bool UnresolvedReference { get; set; }
///
/// Reference object.
@@ -35,31 +35,31 @@ public class OpenApiParameter : IOpenApiSerializable, IOpenApiReferenceable, IEf
/// If in is "header" and the name field is "Accept", "Content-Type" or "Authorization", the parameter definition SHALL be ignored.
/// For all other cases, the name corresponds to the parameter name used by the in property.
///
- public string Name { get; set; }
+ public virtual string Name { get; set; }
///
/// REQUIRED. The location of the parameter.
/// Possible values are "query", "header", "path" or "cookie".
///
- public ParameterLocation? In { get; set; }
+ public virtual ParameterLocation? In { get; set; }
///
/// A brief description of the parameter. This could contain examples of use.
/// CommonMark syntax MAY be used for rich text representation.
///
- public string Description { get; set; }
+ public virtual string Description { get; set; }
///
/// Determines whether this parameter is mandatory.
/// If the parameter location is "path", this property is REQUIRED and its value MUST be true.
/// Otherwise, the property MAY be included and its default value is false.
///
- public bool Required { get; set; }
+ public virtual bool Required { get; set; }
///
/// Specifies that a parameter is deprecated and SHOULD be transitioned out of usage.
///
- public bool Deprecated { get; set; } = false;
+ public virtual bool Deprecated { get; set; } = false;
///
/// Sets the ability to pass empty-valued parameters.
@@ -68,14 +68,14 @@ public class OpenApiParameter : IOpenApiSerializable, IOpenApiReferenceable, IEf
/// If style is used, and if behavior is n/a (cannot be serialized),
/// the value of allowEmptyValue SHALL be ignored.
///
- public bool AllowEmptyValue { get; set; } = false;
+ public virtual bool AllowEmptyValue { get; set; } = false;
///
/// Describes how the parameter value will be serialized depending on the type of the parameter value.
/// Default values (based on value of in): for query - form; for path - simple; for header - simple;
/// for cookie - form.
///
- public ParameterStyle? Style
+ public virtual ParameterStyle? Style
{
get => _style ?? GetDefaultStyleValue();
set => _style = value;
@@ -88,7 +88,7 @@ public ParameterStyle? Style
/// When style is form, the default value is true.
/// For all other styles, the default value is false.
///
- public bool Explode
+ public virtual bool Explode
{
get => _explode ?? Style == ParameterStyle.Form;
set => _explode = value;
@@ -100,12 +100,12 @@ public bool Explode
/// This property only applies to parameters with an in value of query.
/// The default value is false.
///
- public bool AllowReserved { get; set; }
+ public virtual bool AllowReserved { get; set; }
///
/// The schema defining the type used for the parameter.
///
- public OpenApiSchema Schema { get; set; }
+ public virtual OpenApiSchema Schema { get; set; }
///
/// Examples of the media type. Each example SHOULD contain a value
@@ -114,7 +114,7 @@ public bool Explode
/// Furthermore, if referencing a schema which contains an example,
/// the examples value SHALL override the example provided by the schema.
///
- public IDictionary Examples { get; set; } = new Dictionary();
+ public virtual IDictionary Examples { get; set; } = new Dictionary();
///
/// Example of the media type. The example SHOULD match the specified schema and encoding properties
@@ -124,7 +124,7 @@ public bool Explode
/// To represent examples of media types that cannot naturally be represented in JSON or YAML,
/// a string value can contain the example with escaping where necessary.
///
- public OpenApiAny Example { get; set; }
+ public virtual OpenApiAny Example { get; set; }
///
/// A map containing the representations for the parameter.
@@ -135,12 +135,12 @@ public bool Explode
/// When example or examples are provided in conjunction with the schema object,
/// the example MUST follow the prescribed serialization strategy for the parameter.
///
- public IDictionary Content { get; set; } = new Dictionary();
+ public virtual IDictionary Content { get; set; } = new Dictionary();
///
/// This object MAY be extended with Specification Extensions.
///
- public IDictionary Extensions { get; set; } = new Dictionary();
+ public virtual IDictionary Extensions { get; set; } = new Dictionary();
///
/// A parameterless constructor
@@ -173,7 +173,7 @@ public OpenApiParameter(OpenApiParameter parameter)
///
/// Serialize to Open Api v3.1
///
- public void SerializeAsV31(IOpenApiWriter writer)
+ public virtual void SerializeAsV31(IOpenApiWriter writer)
{
SerializeInternal(writer, (writer, element) => element.SerializeAsV31(writer),
(writer, element) => element.SerializeAsV31WithoutReference(writer));
@@ -182,7 +182,7 @@ public void SerializeAsV31(IOpenApiWriter writer)
///
/// Serialize to Open Api v3.0
///
- public void SerializeAsV3(IOpenApiWriter writer)
+ public virtual void SerializeAsV3(IOpenApiWriter writer)
{
SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer),
(writer, element) => element.SerializeAsV3WithoutReference(writer));
@@ -217,9 +217,9 @@ private void SerializeInternal(IOpenApiWriter writer, ActionOpenApiParameter
public OpenApiParameter GetEffective(OpenApiDocument doc)
{
- if (this.Reference != null)
+ if (Reference != null)
{
- return doc.ResolveReferenceTo(this.Reference);
+ return doc.ResolveReferenceTo(Reference);
}
else
{
@@ -230,7 +230,7 @@ public OpenApiParameter GetEffective(OpenApiDocument doc)
///
/// Serialize to OpenAPI V3 document without using reference.
///
- public void SerializeAsV31WithoutReference(IOpenApiWriter writer)
+ public virtual void SerializeAsV31WithoutReference(IOpenApiWriter writer)
{
SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1,
(writer, element) => element.SerializeAsV31(writer));
@@ -239,13 +239,13 @@ public void SerializeAsV31WithoutReference(IOpenApiWriter writer)
///
/// Serialize to OpenAPI V3 document without using reference.
///
- public void SerializeAsV3WithoutReference(IOpenApiWriter writer)
+ public virtual void SerializeAsV3WithoutReference(IOpenApiWriter writer)
{
SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0,
(writer, element) => element.SerializeAsV3(writer));
}
- private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version,
+ internal virtual void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version,
Action callback)
{
writer.WriteStartObject();
@@ -430,7 +430,7 @@ public void SerializeAsV2WithoutReference(IOpenApiWriter writer)
writer.WriteEndObject();
}
- private ParameterStyle? GetDefaultStyleValue()
+ internal virtual ParameterStyle? GetDefaultStyleValue()
{
Style = In switch
{
diff --git a/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs b/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs
index dc4bcd1bc..bcc826ef4 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs
@@ -7,7 +7,6 @@
using Microsoft.OpenApi.Extensions;
using Microsoft.OpenApi.Interfaces;
using Microsoft.OpenApi.Writers;
-using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions;
namespace Microsoft.OpenApi.Models
{
@@ -19,34 +18,34 @@ public class OpenApiPathItem : IOpenApiSerializable, IOpenApiExtensible, IOpenAp
///
/// An optional, string summary, intended to apply to all operations in this path.
///
- public string Summary { get; set; }
+ public virtual string Summary { get; set; }
///
/// An optional, string description, intended to apply to all operations in this path.
///
- public string Description { get; set; }
+ public virtual string Description { get; set; }
///
/// Gets the definition of operations on this path.
///
- public IDictionary Operations { get; set; }
+ public virtual IDictionary Operations { get; set; }
= new Dictionary();
///
/// An alternative server array to service all operations in this path.
///
- public IList Servers { get; set; } = new List();
+ public virtual IList Servers { get; set; } = new List();
///
/// A list of parameters that are applicable for all the operations described under this path.
/// These parameters can be overridden at the operation level, but cannot be removed there.
///
- public IList Parameters { get; set; } = new List();
+ public virtual IList Parameters { get; set; } = new List();
///
/// This object MAY be extended with Specification Extensions.
///
- public IDictionary Extensions { get; set; } = new Dictionary();
+ public virtual IDictionary Extensions { get; set; } = new Dictionary();
///
/// Indicates if object is populated with data or is just a reference to the data
@@ -91,7 +90,7 @@ public OpenApiPathItem(OpenApiPathItem pathItem)
///
/// Serialize to Open Api v3.1
///
- public void SerializeAsV31(IOpenApiWriter writer)
+ public virtual void SerializeAsV31(IOpenApiWriter writer)
{
SerializeInternal(writer, (writer, element) => element.SerializeAsV31(writer),
(writer, element) => element.SerializeAsV31WithoutReference(writer));
@@ -100,7 +99,7 @@ public void SerializeAsV31(IOpenApiWriter writer)
///
/// Serialize to Open Api v3.0
///
- public void SerializeAsV3(IOpenApiWriter writer)
+ public virtual void SerializeAsV3(IOpenApiWriter writer)
{
SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer),
(writer, element) => element.SerializeAsV3WithoutReference(writer));
@@ -137,9 +136,9 @@ private void SerializeInternal(IOpenApiWriter writer, ActionOpenApiPathItem
public OpenApiPathItem GetEffective(OpenApiDocument doc)
{
- if (this.Reference != null)
+ if (Reference != null)
{
- return doc.ResolveReferenceTo(this.Reference);
+ return doc.ResolveReferenceTo(Reference);
}
else
{
@@ -165,7 +164,7 @@ public void SerializeAsV2(IOpenApiWriter writer)
}
else
{
- target = this.GetEffective(Reference.HostDocument);
+ target = GetEffective(Reference.HostDocument);
}
}
@@ -214,7 +213,7 @@ public void SerializeAsV2WithoutReference(IOpenApiWriter writer)
/// Serialize inline PathItem in OpenAPI V31
///
///
- public void SerializeAsV31WithoutReference(IOpenApiWriter writer)
+ public virtual void SerializeAsV31WithoutReference(IOpenApiWriter writer)
{
SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer));
}
@@ -223,13 +222,13 @@ public void SerializeAsV31WithoutReference(IOpenApiWriter writer)
/// Serialize inline PathItem in OpenAPI V3
///
///
- public void SerializeAsV3WithoutReference(IOpenApiWriter writer)
+ public virtual void SerializeAsV3WithoutReference(IOpenApiWriter writer)
{
SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer));
}
- private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version,
+ internal virtual void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version,
Action callback)
{
diff --git a/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs b/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs
index 09058741a..51c5b2465 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs
@@ -30,23 +30,23 @@ public class OpenApiRequestBody : IOpenApiSerializable, IOpenApiReferenceable, I
/// A brief description of the request body. This could contain examples of use.
/// CommonMark syntax MAY be used for rich text representation.
///
- public string Description { get; set; }
+ public virtual string Description { get; set; }
///
/// Determines if the request body is required in the request. Defaults to false.
///
- public bool Required { get; set; }
+ public virtual bool Required { get; set; }
///
/// REQUIRED. The content of the request body. The key is a media type or media type range and the value describes it.
/// For requests that match multiple keys, only the most specific key is applicable. e.g. text/plain overrides text/*
///
- public IDictionary Content { get; set; } = new Dictionary();
+ public virtual IDictionary Content { get; set; } = new Dictionary();
///
/// This object MAY be extended with Specification Extensions.
///
- public IDictionary Extensions { get; set; } = new Dictionary();
+ public virtual IDictionary Extensions { get; set; } = new Dictionary();
///
/// Parameter-less constructor
@@ -69,7 +69,7 @@ public OpenApiRequestBody(OpenApiRequestBody requestBody)
///
/// Serialize to Open Api v3.1
///
- public void SerializeAsV31(IOpenApiWriter writer)
+ public virtual void SerializeAsV31(IOpenApiWriter writer)
{
SerializeInternal(writer, (writer, element) => element.SerializeAsV31(writer),
(writer, element) => element.SerializeAsV31WithoutReference(writer));
@@ -78,7 +78,7 @@ public void SerializeAsV31(IOpenApiWriter writer)
///
/// Serialize to Open Api v3.0
///
- public void SerializeAsV3(IOpenApiWriter writer)
+ public virtual void SerializeAsV3(IOpenApiWriter writer)
{
SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer),
(writer, element) => element.SerializeAsV3WithoutReference(writer));
@@ -113,9 +113,9 @@ private void SerializeInternal(IOpenApiWriter writer, ActionOpenApiRequestBody
public OpenApiRequestBody GetEffective(OpenApiDocument doc)
{
- if (this.Reference != null)
+ if (Reference != null)
{
- return doc.ResolveReferenceTo(this.Reference);
+ return doc.ResolveReferenceTo(Reference);
}
else
{
@@ -126,7 +126,7 @@ public OpenApiRequestBody GetEffective(OpenApiDocument doc)
///
/// Serialize to OpenAPI V31 document without using reference.
///
- public void SerializeAsV31WithoutReference(IOpenApiWriter writer)
+ public virtual void SerializeAsV31WithoutReference(IOpenApiWriter writer)
{
SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1,
(writer, element) => element.SerializeAsV31(writer));
@@ -135,13 +135,13 @@ public void SerializeAsV31WithoutReference(IOpenApiWriter writer)
///
/// Serialize to OpenAPI V3 document without using reference.
///
- public void SerializeAsV3WithoutReference(IOpenApiWriter writer)
+ public virtual void SerializeAsV3WithoutReference(IOpenApiWriter writer)
{
SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0,
(writer, element) => element.SerializeAsV3(writer));
}
- private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version,
+ internal virtual 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 8a90dc1ae..32faca799 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiResponse.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiResponse.cs
@@ -7,7 +7,6 @@
using System.Text.Json.Nodes;
using Microsoft.OpenApi.Interfaces;
using Microsoft.OpenApi.Writers;
-using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions;
namespace Microsoft.OpenApi.Models
{
@@ -19,30 +18,30 @@ public class OpenApiResponse : IOpenApiSerializable, IOpenApiReferenceable, IOpe
///
/// REQUIRED. A short description of the response.
///
- public string Description { get; set; }
+ public virtual string Description { get; set; }
///
/// Maps a header name to its definition.
///
- public IDictionary Headers { get; set; } = new Dictionary();
+ public virtual IDictionary Headers { get; set; } = new Dictionary();
///
/// A map containing descriptions of potential response payloads.
/// The key is a media type or media type range and the value describes it.
///
- public IDictionary Content { get; set; } = new Dictionary();
+ public virtual IDictionary Content { get; set; } = new Dictionary();
///
/// A map of operations links that can be followed from the response.
/// The key of the map is a short name for the link,
/// following the naming constraints of the names for Component Objects.
///
- public IDictionary Links { get; set; } = new Dictionary();
+ public virtual IDictionary Links { get; set; } = new Dictionary();
///
/// This object MAY be extended with Specification Extensions.
///
- public IDictionary Extensions { get; set; } = new Dictionary();
+ public virtual IDictionary Extensions { get; set; } = new Dictionary();
///
/// Indicates if object is populated with data or is just a reference to the data
@@ -76,7 +75,7 @@ public OpenApiResponse(OpenApiResponse response)
///
/// Serialize to Open Api v3.1
///
- public void SerializeAsV31(IOpenApiWriter writer)
+ public virtual void SerializeAsV31(IOpenApiWriter writer)
{
SerializeInternal(writer, (writer, element) => element.SerializeAsV31(writer),
(writer, element) => element.SerializeAsV31WithoutReference(writer));
@@ -85,7 +84,7 @@ public void SerializeAsV31(IOpenApiWriter writer)
///
/// Serialize to Open Api v3.0.
///
- public void SerializeAsV3(IOpenApiWriter writer)
+ public virtual void SerializeAsV3(IOpenApiWriter writer)
{
SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer),
(writer, element) => element.SerializeAsV3WithoutReference(writer));
@@ -120,9 +119,9 @@ private void SerializeInternal(IOpenApiWriter writer, ActionOpenApiResponse
public OpenApiResponse GetEffective(OpenApiDocument doc)
{
- if (this.Reference != null)
+ if (Reference != null)
{
- return doc.ResolveReferenceTo(this.Reference);
+ return doc.ResolveReferenceTo(Reference);
}
else
{
@@ -133,7 +132,7 @@ public OpenApiResponse GetEffective(OpenApiDocument doc)
///
/// Serialize to OpenAPI V3 document without using reference.
///
- public void SerializeAsV31WithoutReference(IOpenApiWriter writer)
+ public virtual void SerializeAsV31WithoutReference(IOpenApiWriter writer)
{
SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1,
(writer, element) => element.SerializeAsV31(writer));
@@ -142,13 +141,13 @@ public void SerializeAsV31WithoutReference(IOpenApiWriter writer)
///
/// Serialize to OpenAPI V3 document without using reference.
///
- public void SerializeAsV3WithoutReference(IOpenApiWriter writer)
+ public virtual void SerializeAsV3WithoutReference(IOpenApiWriter writer)
{
SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0,
(writer, element) => element.SerializeAsV3(writer));
}
- private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version,
+ internal virtual 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 3ccf9b468..a763f0954 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiSecurityRequirement.cs
@@ -5,7 +5,6 @@
using System.Collections.Generic;
using Microsoft.OpenApi.Interfaces;
using Microsoft.OpenApi.Writers;
-using static Microsoft.OpenApi.Extensions.OpenApiSerializableExtensions;
namespace Microsoft.OpenApi.Models
{
diff --git a/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs b/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs
index f4a06dc18..07b3c6161 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiSecurityScheme.cs
@@ -3,7 +3,6 @@
using System;
using System.Collections.Generic;
-using System.Text.Json.Nodes;
using Microsoft.OpenApi.Extensions;
using Microsoft.OpenApi.Interfaces;
using Microsoft.OpenApi.Writers;
@@ -18,50 +17,50 @@ public class OpenApiSecurityScheme : IOpenApiSerializable, IOpenApiReferenceable
///
/// REQUIRED. The type of the security scheme. Valid values are "apiKey", "http", "oauth2", "openIdConnect".
///
- public SecuritySchemeType Type { get; set; }
+ public virtual SecuritySchemeType Type { get; set; }
///
/// A short description for security scheme. CommonMark syntax MAY be used for rich text representation.
///
- public string Description { get; set; }
+ public virtual string Description { get; set; }
///
/// REQUIRED. The name of the header, query or cookie parameter to be used.
///
- public string Name { get; set; }
+ public virtual string Name { get; set; }
///
/// REQUIRED. The location of the API key. Valid values are "query", "header" or "cookie".
///
- public ParameterLocation In { get; set; }
+ public virtual ParameterLocation In { get; set; }
///
/// REQUIRED. The name of the HTTP Authorization scheme to be used
/// in the Authorization header as defined in RFC7235.
///
- public string Scheme { get; set; }
+ public virtual string Scheme { get; set; }
///
/// A hint to the client to identify how the bearer token is formatted.
/// Bearer tokens are usually generated by an authorization server,
/// so this information is primarily for documentation purposes.
///
- public string BearerFormat { get; set; }
+ public virtual string BearerFormat { get; set; }
///
/// REQUIRED. An object containing configuration information for the flow types supported.
///
- public OpenApiOAuthFlows Flows { get; set; }
+ public virtual OpenApiOAuthFlows Flows { get; set; }
///
/// REQUIRED. OpenId Connect URL to discover OAuth2 configuration values.
///
- public Uri OpenIdConnectUrl { get; set; }
+ public virtual Uri OpenIdConnectUrl { get; set; }
///
/// Specification Extensions.
///
- public IDictionary Extensions { get; set; } = new Dictionary();
+ public virtual IDictionary Extensions { get; set; } = new Dictionary();
///
/// Indicates if object is populated with data or is just a reference to the data
@@ -99,7 +98,7 @@ public OpenApiSecurityScheme(OpenApiSecurityScheme securityScheme)
///
/// Serialize to Open Api v3.1
///
- public void SerializeAsV31(IOpenApiWriter writer)
+ public virtual void SerializeAsV31(IOpenApiWriter writer)
{
SerializeInternal(writer, (writer, element) => element.SerializeAsV31(writer), SerializeAsV31WithoutReference);
}
@@ -107,7 +106,7 @@ public void SerializeAsV31(IOpenApiWriter writer)
///
/// Serialize to Open Api v3.0
///
- public void SerializeAsV3(IOpenApiWriter writer)
+ public virtual void SerializeAsV3(IOpenApiWriter writer)
{
SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer), SerializeAsV3WithoutReference);
}
@@ -132,7 +131,7 @@ private void SerializeInternal(IOpenApiWriter writer, Action
/// Serialize to OpenAPI V31 document without using reference.
///
- public void SerializeAsV31WithoutReference(IOpenApiWriter writer)
+ public virtual void SerializeAsV31WithoutReference(IOpenApiWriter writer)
{
SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1,
(writer, element) => element.SerializeAsV31(writer));
@@ -141,13 +140,13 @@ public void SerializeAsV31WithoutReference(IOpenApiWriter writer)
///
/// Serialize to OpenAPI V3 document without using reference.
///
- public void SerializeAsV3WithoutReference(IOpenApiWriter writer)
+ public virtual void SerializeAsV3WithoutReference(IOpenApiWriter writer)
{
SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0,
(writer, element) => element.SerializeAsV3(writer));
}
- private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version,
+ internal virtual void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version,
Action callback)
{
writer.WriteStartObject();
diff --git a/src/Microsoft.OpenApi/Models/OpenApiServerVariable.cs b/src/Microsoft.OpenApi/Models/OpenApiServerVariable.cs
index 3236a2b49..7194b6284 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiServerVariable.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiServerVariable.cs
@@ -1,8 +1,7 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
+// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
using System.Collections.Generic;
-using System.Text.Json.Nodes;
using Microsoft.OpenApi.Interfaces;
using Microsoft.OpenApi.Writers;
diff --git a/src/Microsoft.OpenApi/Models/OpenApiTag.cs b/src/Microsoft.OpenApi/Models/OpenApiTag.cs
index d4528054d..bcc2c056d 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiTag.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiTag.cs
@@ -1,9 +1,8 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
+// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
using System;
using System.Collections.Generic;
-using System.Text.Json.Nodes;
using Microsoft.OpenApi.Interfaces;
using Microsoft.OpenApi.Writers;
@@ -17,22 +16,22 @@ public class OpenApiTag : IOpenApiSerializable, IOpenApiReferenceable, IOpenApiE
///
/// The name of the tag.
///
- public string Name { get; set; }
+ public virtual string Name { get; set; }
///
/// A short description for the tag.
///
- public string Description { get; set; }
+ public virtual string Description { get; set; }
///
/// Additional external documentation for this tag.
///
- public OpenApiExternalDocs ExternalDocs { get; set; }
+ public virtual OpenApiExternalDocs ExternalDocs { get; set; }
///
/// This object MAY be extended with Specification Extensions.
///
- public IDictionary Extensions { get; set; } = new Dictionary();
+ public virtual IDictionary Extensions { get; set; } = new Dictionary();
///
/// Indicates if object is populated with data or is just a reference to the data
@@ -65,7 +64,7 @@ public OpenApiTag(OpenApiTag tag)
///
/// Serialize to Open Api v3.1
///
- public void SerializeAsV31(IOpenApiWriter writer)
+ public virtual void SerializeAsV31(IOpenApiWriter writer)
{
SerializeInternal(writer, (writer, element) => element.SerializeAsV31(writer));
}
@@ -73,7 +72,7 @@ public void SerializeAsV31(IOpenApiWriter writer)
///
/// Serialize to Open Api v3.0
///
- public void SerializeAsV3(IOpenApiWriter writer)
+ public virtual void SerializeAsV3(IOpenApiWriter writer)
{
SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer));
}
@@ -97,7 +96,7 @@ private void SerializeInternal(IOpenApiWriter writer, Action
/// Serialize to OpenAPI V3 document without using reference.
///
- public void SerializeAsV31WithoutReference(IOpenApiWriter writer)
+ public virtual void SerializeAsV31WithoutReference(IOpenApiWriter writer)
{
SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1,
(writer, element) => element.SerializeAsV31(writer));
@@ -106,13 +105,13 @@ public void SerializeAsV31WithoutReference(IOpenApiWriter writer)
///
/// Serialize to OpenAPI V3 document without using reference.
///
- public void SerializeAsV3WithoutReference(IOpenApiWriter writer)
+ public virtual void SerializeAsV3WithoutReference(IOpenApiWriter writer)
{
SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0,
(writer, element) => element.SerializeAsV3(writer));
}
- private void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version,
+ internal virtual void SerializeInternalWithoutReference(IOpenApiWriter writer, OpenApiSpecVersion version,
Action callback)
{
writer.WriteStartObject();
diff --git a/src/Microsoft.OpenApi/Models/OpenApiXml.cs b/src/Microsoft.OpenApi/Models/OpenApiXml.cs
index 3d007d7b6..91748c879 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiXml.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiXml.cs
@@ -1,9 +1,8 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
+// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
using System;
using System.Collections.Generic;
-using System.Text.Json.Nodes;
using Microsoft.OpenApi.Interfaces;
using Microsoft.OpenApi.Writers;
diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiCallbackReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiCallbackReference.cs
new file mode 100644
index 000000000..3d4cee9ce
--- /dev/null
+++ b/src/Microsoft.OpenApi/Models/References/OpenApiCallbackReference.cs
@@ -0,0 +1,100 @@
+// 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;
+using Microsoft.OpenApi.Properties;
+using Microsoft.OpenApi.Writers;
+
+namespace Microsoft.OpenApi.Models.References
+{
+ ///
+ /// Callback Object Reference: A reference to a map of possible out-of band callbacks related to the parent operation.
+ ///
+ public class OpenApiCallbackReference : OpenApiCallback
+ {
+ private OpenApiCallback _target;
+ private readonly OpenApiReference _reference;
+
+ private OpenApiCallback Target
+ {
+ get
+ {
+ _target ??= _reference.HostDocument.ResolveReferenceTo(_reference);
+ return _target;
+ }
+ }
+
+ ///
+ /// Constructor initializing the reference object.
+ ///
+ /// The reference Id.
+ /// The host OpenAPI document.
+ /// Optional: External resource in the reference.
+ /// It may be:
+ /// 1. a absolute/relative file path, for example: ../commons/pet.json
+ /// 2. a Url, for example: http://localhost/pet.json
+ ///
+ public OpenApiCallbackReference(string referenceId, OpenApiDocument hostDocument, string externalResource = null)
+ {
+ if (string.IsNullOrEmpty(referenceId))
+ {
+ throw Error.Argument(nameof(referenceId), SRResource.ReferenceIdIsNullOrEmpty);
+ }
+ if (hostDocument == null)
+ {
+ throw Error.Argument(nameof(hostDocument), SRResource.HostDocumentIsNull);
+ }
+
+ _reference = new OpenApiReference()
+ {
+ Id = referenceId,
+ HostDocument = hostDocument,
+ Type = ReferenceType.Callback,
+ ExternalResource = externalResource
+ };
+ }
+
+ ///
+ public override Dictionary PathItems { get => Target.PathItems; set => Target.PathItems = value; }
+
+ ///
+ public override IDictionary Extensions { get => Target.Extensions; set => Target.Extensions = value; }
+
+ ///
+ public override void SerializeAsV3(IOpenApiWriter writer)
+ {
+ SerializeInternal(writer, (writer, referenceElement) => referenceElement.SerializeAsV3WithoutReference(writer));
+ }
+
+ ///
+ public override void SerializeAsV31(IOpenApiWriter writer)
+ {
+ SerializeInternal(writer, (writer, referenceElement) => referenceElement.SerializeAsV31WithoutReference(writer));
+ }
+
+ ///
+ public override void SerializeAsV3WithoutReference(IOpenApiWriter writer)
+ {
+ SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0,
+ (writer, element) => element.SerializeAsV3(writer));
+ }
+
+ ///
+ public override void SerializeAsV31WithoutReference(IOpenApiWriter writer)
+ {
+ SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1,
+ (writer, element) => element.SerializeAsV31(writer));
+ }
+
+ ///
+ private void SerializeInternal(IOpenApiWriter writer,
+ Action action)
+ {
+ writer = writer ?? throw Error.ArgumentNull(nameof(writer));
+ action(writer, Target);
+ }
+ }
+}
diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiExampleReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiExampleReference.cs
new file mode 100644
index 000000000..d988ec290
--- /dev/null
+++ b/src/Microsoft.OpenApi/Models/References/OpenApiExampleReference.cs
@@ -0,0 +1,117 @@
+// 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.Properties;
+using Microsoft.OpenApi.Writers;
+
+namespace Microsoft.OpenApi.Models.References
+{
+ ///
+ /// Example Object Reference.
+ ///
+ internal class OpenApiExampleReference : OpenApiExample
+ {
+ private OpenApiExample _target;
+ private readonly OpenApiReference _reference;
+ private string _summary;
+ private string _description;
+
+ private OpenApiExample Target
+ {
+ get
+ {
+ _target ??= _reference.HostDocument.ResolveReferenceTo(_reference);
+ return _target;
+ }
+ }
+
+ ///
+ /// Constructor initializing the reference object.
+ ///
+ /// The reference Id.
+ /// The host OpenAPI document.
+ /// Optional: External resource in the reference.
+ /// It may be:
+ /// 1. a absolute/relative file path, for example: ../commons/pet.json
+ /// 2. a Url, for example: http://localhost/pet.json
+ ///
+ public OpenApiExampleReference(string referenceId, OpenApiDocument hostDocument, string externalResource = null)
+ {
+ if (string.IsNullOrEmpty(referenceId))
+ {
+ throw Error.Argument(nameof(referenceId), SRResource.ReferenceIdIsNullOrEmpty);
+ }
+ if (hostDocument == null)
+ {
+ throw Error.Argument(nameof(hostDocument), SRResource.HostDocumentIsNull);
+ }
+
+ _reference = new OpenApiReference()
+ {
+ Id = referenceId,
+ HostDocument = hostDocument,
+ Type = ReferenceType.Example,
+ ExternalResource = externalResource
+ };
+ }
+
+ ///
+ public override string Description
+ {
+ get => string.IsNullOrEmpty(_description) ? Target.Description : _description;
+ set => _description = value;
+ }
+
+ ///
+ public override string Summary
+ {
+ get => string.IsNullOrEmpty(_summary) ? Target.Summary : _summary;
+ set => _summary = value;
+ }
+
+ ///
+ public override IDictionary Extensions { get => Target.Extensions; set => Target.Extensions = value; }
+
+ ///
+ public override string ExternalValue { get => Target.ExternalValue; set => Target.ExternalValue = value; }
+
+ ///
+ public override OpenApiAny Value { get => Target.Value; set => Target.Value = value; }
+
+ ///
+ public override void SerializeAsV3(IOpenApiWriter writer)
+ {
+ SerializeInternal(writer, (writer, referenceElement) => referenceElement.SerializeAsV3WithoutReference(writer));
+ }
+
+ ///
+ public override void SerializeAsV31(IOpenApiWriter writer)
+ {
+ SerializeInternal(writer, (writer, referenceElement) => referenceElement.SerializeAsV31WithoutReference(writer));
+ }
+
+ ///
+ public override void SerializeAsV3WithoutReference(IOpenApiWriter writer)
+ {
+ SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0);
+ }
+
+ ///
+ public override void SerializeAsV31WithoutReference(IOpenApiWriter writer)
+ {
+ SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1);
+ }
+
+ ///
+ private void SerializeInternal(IOpenApiWriter writer,
+ Action action)
+ {
+ writer = writer ?? throw Error.ArgumentNull(nameof(writer));
+ action(writer, Target);
+ }
+ }
+}
diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiHeaderReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiHeaderReference.cs
new file mode 100644
index 000000000..a7ec90fca
--- /dev/null
+++ b/src/Microsoft.OpenApi/Models/References/OpenApiHeaderReference.cs
@@ -0,0 +1,132 @@
+// 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.Properties;
+using Microsoft.OpenApi.Writers;
+
+namespace Microsoft.OpenApi.Models.References
+{
+ internal class OpenApiHeaderReference : OpenApiHeader
+ {
+ private OpenApiHeader _target;
+ private readonly OpenApiReference _reference;
+ private string _description;
+
+ private OpenApiHeader Target
+ {
+ get
+ {
+ _target ??= _reference.HostDocument.ResolveReferenceTo(_reference);
+ return _target;
+ }
+ }
+
+ ///
+ /// Constructor initializing the reference object.
+ ///
+ /// The reference Id.
+ /// The host OpenAPI document.
+ /// Optional: External resource in the reference.
+ /// It may be:
+ /// 1. a absolute/relative file path, for example: ../commons/pet.json
+ /// 2. a Url, for example: http://localhost/pet.json
+ ///
+ public OpenApiHeaderReference(string referenceId, OpenApiDocument hostDocument, string externalResource = null)
+ {
+ if (string.IsNullOrEmpty(referenceId))
+ {
+ throw Error.Argument(nameof(referenceId), SRResource.ReferenceIdIsNullOrEmpty);
+ }
+ if (hostDocument == null)
+ {
+ throw Error.Argument(nameof(hostDocument), SRResource.HostDocumentIsNull);
+ }
+
+ _reference = new OpenApiReference()
+ {
+ Id = referenceId,
+ HostDocument = hostDocument,
+ Type = ReferenceType.Header,
+ ExternalResource = externalResource
+ };
+ }
+
+ ///
+ public override string Description
+ {
+ get => string.IsNullOrEmpty(_description) ? Target.Description : _description;
+ set => _description = value;
+ }
+
+ ///
+ public override bool Required { get => Target.Required; set => Target.Required = value; }
+
+ ///
+ public override bool Deprecated { get => Target.Deprecated; set => Target.Deprecated = value; }
+
+ ///
+ public override bool AllowEmptyValue { get => Target.AllowEmptyValue; set => Target.AllowEmptyValue = value; }
+
+ ///
+ public override OpenApiSchema Schema { get => Target.Schema; set => Target.Schema = value; }
+
+ ///
+ public override ParameterStyle? Style { get => Target.Style; set => Target.Style = value; }
+
+ ///
+ public override bool Explode { get => Target.Explode; set => Target.Explode = value; }
+
+ ///
+ public override bool AllowReserved { get => Target.AllowReserved; set => Target.AllowReserved = value; }
+
+ ///
+ public override OpenApiAny Example { get => Target.Example; set => Target.Example = value; }
+
+ ///
+ public override IDictionary Examples { get => Target.Examples; set => Target.Examples = value; }
+
+ ///
+ public override IDictionary Content { get => Target.Content; set => Target.Content = value; }
+
+ ///
+ public override IDictionary Extensions { get => base.Extensions; set => base.Extensions = value; }
+
+ ///
+ public override void SerializeAsV31(IOpenApiWriter writer)
+ {
+ SerializeInternal(writer, (writer, element) => element.SerializeAsV31WithoutReference(writer));
+ }
+
+ ///
+ public override void SerializeAsV3(IOpenApiWriter writer)
+ {
+ SerializeInternal(writer, (writer, element) => element.SerializeAsV3WithoutReference(writer));
+ }
+
+ ///
+ public override void SerializeAsV31WithoutReference(IOpenApiWriter writer)
+ {
+ SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1,
+ (writer, element) => element.SerializeAsV31(writer));
+ }
+
+ ///
+ public override void SerializeAsV3WithoutReference(IOpenApiWriter writer)
+ {
+ SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0,
+ (writer, element) => element.SerializeAsV3(writer));
+ }
+
+ ///
+ private void SerializeInternal(IOpenApiWriter writer,
+ Action action)
+ {
+ writer = writer ?? throw Error.ArgumentNull(nameof(writer));
+ action(writer, Target);
+ }
+ }
+}
diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiLinkReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiLinkReference.cs
new file mode 100644
index 000000000..d80c93083
--- /dev/null
+++ b/src/Microsoft.OpenApi/Models/References/OpenApiLinkReference.cs
@@ -0,0 +1,117 @@
+// 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.Properties;
+using Microsoft.OpenApi.Writers;
+
+namespace Microsoft.OpenApi.Models.References
+{
+ ///
+ /// Link Object Reference.
+ ///
+ internal class OpenApiLinkReference : OpenApiLink
+ {
+ private OpenApiLink _target;
+ private readonly OpenApiReference _reference;
+ private string _description;
+
+ private OpenApiLink Target
+ {
+ get
+ {
+ _target ??= _reference.HostDocument.ResolveReferenceTo(_reference);
+ return _target;
+ }
+ }
+
+ ///
+ /// Constructor initializing the reference object.
+ ///
+ /// The reference Id.
+ /// The host OpenAPI document.
+ /// Optional: External resource in the reference.
+ /// It may be:
+ /// 1. a absolute/relative file path, for example: ../commons/pet.json
+ /// 2. a Url, for example: http://localhost/pet.json
+ ///
+ public OpenApiLinkReference(string referenceId, OpenApiDocument hostDocument, string externalResource = null)
+ {
+ if (string.IsNullOrEmpty(referenceId))
+ {
+ throw Error.Argument(nameof(referenceId), SRResource.ReferenceIdIsNullOrEmpty);
+ }
+ if (hostDocument == null)
+ {
+ throw Error.Argument(nameof(hostDocument), SRResource.HostDocumentIsNull);
+ }
+
+ _reference = new OpenApiReference()
+ {
+ Id = referenceId,
+ HostDocument = hostDocument,
+ Type = ReferenceType.Link,
+ ExternalResource = externalResource
+ };
+ }
+
+ ///
+ public override string OperationRef { get => Target.OperationRef; set => Target.OperationRef = value; }
+
+ ///
+ public override string OperationId { get => Target.OperationId; set => Target.OperationId = value; }
+
+ ///
+ public override OpenApiServer Server { get => Target.Server; set => Target.Server = value; }
+
+ ///
+ public override string Description
+ {
+ get => string.IsNullOrEmpty(_description) ? Target.Description : _description;
+ set => _description = value;
+ }
+
+ ///
+ public override Dictionary Parameters { get => Target.Parameters; set => Target.Parameters = value; }
+
+ ///
+ public override RuntimeExpressionAnyWrapper RequestBody { get => Target.RequestBody; set => Target.RequestBody = value; }
+
+ ///
+ public override IDictionary Extensions { get => base.Extensions; set => base.Extensions = value; }
+
+ ///
+ public override void SerializeAsV3(IOpenApiWriter writer)
+ {
+ SerializeInternal(writer, (writer, element) => element.SerializeAsV3WithoutReference(writer));
+ }
+
+ ///
+ public override void SerializeAsV31(IOpenApiWriter writer)
+ {
+ SerializeInternal(writer, (writer, element) => element.SerializeAsV31WithoutReference(writer));
+ }
+
+ ///
+ public override void SerializeAsV3WithoutReference(IOpenApiWriter writer)
+ {
+ SerializeInternalWithoutReference(writer, (writer, element) => element.SerializeAsV3(writer));
+ }
+
+ ///
+ public override void SerializeAsV31WithoutReference(IOpenApiWriter writer)
+ {
+ SerializeInternalWithoutReference(writer, (writer, element) => element.SerializeAsV31(writer));
+ }
+
+ ///
+ private void SerializeInternal(IOpenApiWriter writer,
+ Action action)
+ {
+ writer = writer ?? throw Error.ArgumentNull(nameof(writer));
+ action(writer, Target);
+ }
+ }
+}
diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiParameterReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiParameterReference.cs
new file mode 100644
index 000000000..6a12b0451
--- /dev/null
+++ b/src/Microsoft.OpenApi/Models/References/OpenApiParameterReference.cs
@@ -0,0 +1,151 @@
+// 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.Properties;
+using Microsoft.OpenApi.Writers;
+
+namespace Microsoft.OpenApi.Models.References
+{
+ ///
+ /// Parameter Object Reference.
+ ///
+ internal class OpenApiParameterReference : OpenApiParameter
+ {
+ private OpenApiParameter _target;
+ private readonly OpenApiReference _reference;
+ private string _description;
+ private bool? _explode;
+ private ParameterStyle? _style;
+
+ private OpenApiParameter Target
+ {
+ get
+ {
+ _target ??= _reference.HostDocument.ResolveReferenceTo(_reference);
+ return _target;
+ }
+ }
+
+ ///
+ /// Constructor initializing the reference object.
+ ///
+ /// The reference Id.
+ /// The host OpenAPI document.
+ /// Optional: External resource in the reference.
+ /// It may be:
+ /// 1. a absolute/relative file path, for example: ../commons/pet.json
+ /// 2. a Url, for example: http://localhost/pet.json
+ ///
+ public OpenApiParameterReference(string referenceId, OpenApiDocument hostDocument, string externalResource = null)
+ {
+ if (string.IsNullOrEmpty(referenceId))
+ {
+ throw Error.Argument(nameof(referenceId), SRResource.ReferenceIdIsNullOrEmpty);
+ }
+ if (hostDocument == null)
+ {
+ throw Error.Argument(nameof(hostDocument), SRResource.HostDocumentIsNull);
+ }
+
+ _reference = new OpenApiReference()
+ {
+ Id = referenceId,
+ HostDocument = hostDocument,
+ Type = ReferenceType.Parameter,
+ ExternalResource = externalResource
+ };
+ }
+
+ ///
+ public override string Name { get => Target.Name; set => Target.Name = value; }
+
+ ///
+ public override string Description
+ {
+ get => string.IsNullOrEmpty(_description) ? Target.Description : _description;
+ set => _description = value;
+ }
+
+ ///
+ public override bool Required { get => Target.Required; set => Target.Required = value; }
+
+ ///
+ public override bool Deprecated { get => Target.Deprecated; set => Target.Deprecated = value; }
+
+ ///
+ public override bool AllowEmptyValue { get => Target.AllowEmptyValue; set => Target.AllowEmptyValue = value; }
+
+ ///
+ public override bool AllowReserved { get => Target.AllowReserved; set => Target.AllowReserved = value; }
+
+ ///
+ public override OpenApiSchema Schema { get => Target.Schema; set => Target.Schema = value; }
+
+ ///
+ public override IDictionary Examples { get => Target.Examples; set => Target.Examples = value; }
+
+ ///
+ public override OpenApiAny Example { get => Target.Example; set => Target.Example = value; }
+
+ ///
+ public override ParameterLocation? In { get => Target.In; set => Target.In = value; }
+
+ ///
+ public override ParameterStyle? Style
+ {
+ get => _style ?? GetDefaultStyleValue();
+ set => _style = value;
+ }
+
+ ///
+ public override bool Explode
+ {
+ get => _explode ?? Style == ParameterStyle.Form;
+ set => _explode = value;
+ }
+
+ ///
+ public override IDictionary Content { get => Target.Content; set => Target.Content = value; }
+
+ ///
+ public override IDictionary Extensions { get => Target.Extensions; set => Target.Extensions = value; }
+
+ ///
+ public override void SerializeAsV3(IOpenApiWriter writer)
+ {
+ SerializeInternal(writer, (writer, element) => element.SerializeAsV3WithoutReference(writer));
+ }
+
+ ///
+ public override void SerializeAsV31(IOpenApiWriter writer)
+ {
+ SerializeInternal(writer, (writer, element) => element.SerializeAsV31WithoutReference(writer));
+ }
+
+ ///
+ public override void SerializeAsV3WithoutReference(IOpenApiWriter writer)
+ {
+ SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0,
+ (writer, element) => element.SerializeAsV3(writer));
+ }
+
+ ///
+ public override void SerializeAsV31WithoutReference(IOpenApiWriter writer)
+ {
+ SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1,
+ (writer, element) => element.SerializeAsV31(writer));
+ }
+
+ ///
+ private void SerializeInternal(IOpenApiWriter writer,
+ Action action)
+ {
+ writer = writer ?? throw Error.ArgumentNull(nameof(writer));
+ action(writer, Target);
+ }
+ }
+}
diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiPathItemReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiPathItemReference.cs
new file mode 100644
index 000000000..42f0a5920
--- /dev/null
+++ b/src/Microsoft.OpenApi/Models/References/OpenApiPathItemReference.cs
@@ -0,0 +1,119 @@
+// 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.Properties;
+using Microsoft.OpenApi.Writers;
+
+namespace Microsoft.OpenApi.Models.References
+{
+ ///
+ /// Path Item Object Reference: to describe the operations available on a single path.
+ ///
+ internal class OpenApiPathItemReference : OpenApiPathItem
+ {
+ private OpenApiPathItem _target;
+ private readonly OpenApiReference _reference;
+ private string _description;
+ private string _summary;
+
+ private OpenApiPathItem Target
+ {
+ get
+ {
+ _target ??= _reference.HostDocument.ResolveReferenceTo(_reference);
+ return _target;
+ }
+ }
+
+ ///
+ /// Constructor initializing the reference object.
+ ///
+ /// The reference Id.
+ /// The host OpenAPI document.
+ /// Optional: External resource in the reference.
+ /// It may be:
+ /// 1. a absolute/relative file path, for example: ../commons/pet.json
+ /// 2. a Url, for example: http://localhost/pet.json
+ ///
+ public OpenApiPathItemReference(string referenceId, OpenApiDocument hostDocument, string externalResource = null)
+ {
+ if (string.IsNullOrEmpty(referenceId))
+ {
+ throw Error.Argument(nameof(referenceId), SRResource.ReferenceIdIsNullOrEmpty);
+ }
+ if (hostDocument == null)
+ {
+ throw Error.Argument(nameof(hostDocument), SRResource.HostDocumentIsNull);
+ }
+
+ _reference = new OpenApiReference()
+ {
+ Id = referenceId,
+ HostDocument = hostDocument,
+ Type = ReferenceType.PathItem,
+ ExternalResource = externalResource
+ };
+ }
+
+ ///
+ public override string Summary
+ {
+ get => string.IsNullOrEmpty(_summary) ? Target.Summary : _summary;
+ set => _summary = value;
+ }
+
+ ///
+ public override string Description
+ {
+ get => string.IsNullOrEmpty(_description) ? Target.Description : _description;
+ set => _description = value;
+ }
+
+ ///
+ public override IDictionary Operations { get => Target.Operations; set => Target.Operations = value; }
+
+ ///
+ public override IList Servers { get => Target.Servers; set => Target.Servers = value; }
+
+ ///
+ public override IList Parameters { get => Target.Parameters; set => Target.Parameters = value; }
+
+ ///
+ public override IDictionary Extensions { get => Target.Extensions; set => Target.Extensions = value; }
+
+ ///
+ public override void SerializeAsV3(IOpenApiWriter writer)
+ {
+ SerializeInternal(writer, (writer, element) => element.SerializeAsV3WithoutReference(writer));
+ }
+
+ ///
+ public override void SerializeAsV31(IOpenApiWriter writer)
+ {
+ SerializeInternal(writer, (writer, element) => element.SerializeAsV31WithoutReference(writer));
+ }
+
+ ///
+ public override void SerializeAsV3WithoutReference(IOpenApiWriter writer)
+ {
+ SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer));
+ }
+
+ ///
+ public override void SerializeAsV31WithoutReference(IOpenApiWriter writer)
+ {
+ SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer));
+ }
+
+ ///
+ private void SerializeInternal(IOpenApiWriter writer,
+ Action action)
+ {
+ writer = writer ?? throw Error.ArgumentNull(nameof(writer));
+ action(writer, Target);
+ }
+ }
+}
diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiRequestBodyReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiRequestBodyReference.cs
new file mode 100644
index 000000000..290d4b9b9
--- /dev/null
+++ b/src/Microsoft.OpenApi/Models/References/OpenApiRequestBodyReference.cs
@@ -0,0 +1,110 @@
+// 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.Properties;
+using Microsoft.OpenApi.Writers;
+
+namespace Microsoft.OpenApi.Models.References
+{
+ ///
+ /// Request Body Object Reference.
+ ///
+ internal class OpenApiRequestBodyReference : OpenApiRequestBody
+ {
+ private OpenApiRequestBody _target;
+ private readonly OpenApiReference _reference;
+ private string _description;
+
+ private OpenApiRequestBody Target
+ {
+ get
+ {
+ _target ??= _reference.HostDocument.ResolveReferenceTo(_reference);
+ return _target;
+ }
+ }
+
+ ///
+ /// Constructor initializing the reference object.
+ ///
+ /// The reference Id.
+ /// The host OpenAPI document.
+ /// Optional: External resource in the reference.
+ /// It may be:
+ /// 1. a absolute/relative file path, for example: ../commons/pet.json
+ /// 2. a Url, for example: http://localhost/pet.json
+ ///
+ public OpenApiRequestBodyReference(string referenceId, OpenApiDocument hostDocument, string externalResource = null)
+ {
+ if (string.IsNullOrEmpty(referenceId))
+ {
+ throw Error.Argument(nameof(referenceId), SRResource.ReferenceIdIsNullOrEmpty);
+ }
+ if (hostDocument == null)
+ {
+ throw Error.Argument(nameof(hostDocument), SRResource.HostDocumentIsNull);
+ }
+
+ _reference = new OpenApiReference()
+ {
+ Id = referenceId,
+ HostDocument = hostDocument,
+ Type = ReferenceType.RequestBody,
+ ExternalResource = externalResource
+ };
+ }
+
+ ///
+ public override string Description
+ {
+ get => string.IsNullOrEmpty(_description) ? Target.Description : _description;
+ set => _description = value;
+ }
+
+ ///
+ public override IDictionary Content { get => Target.Content; set => Target.Content = value; }
+
+ ///
+ public override bool Required { get => Target.Required; set => Target.Required = value; }
+
+ ///
+ public override IDictionary Extensions { get => Target.Extensions; set => Target.Extensions = value; }
+
+ ///
+ public override void SerializeAsV3(IOpenApiWriter writer)
+ {
+ SerializeInternal(writer, (writer, element) => element.SerializeAsV3WithoutReference(writer));
+ }
+
+ ///
+ public override void SerializeAsV31(IOpenApiWriter writer)
+ {
+ SerializeInternal(writer, (writer, element) => element.SerializeAsV31WithoutReference(writer));
+ }
+
+ ///
+ public override void SerializeAsV3WithoutReference(IOpenApiWriter writer)
+ {
+ SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0,
+ (writer, element) => element.SerializeAsV3(writer));
+ }
+
+ ///
+ public override void SerializeAsV31WithoutReference(IOpenApiWriter writer)
+ {
+ SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1,
+ (writer, element) => element.SerializeAsV31(writer));
+ }
+
+ ///
+ private void SerializeInternal(IOpenApiWriter writer,
+ Action action)
+ {
+ writer = writer ?? throw Error.ArgumentNull(nameof(writer));
+ action(writer, Target);
+ }
+ }
+}
diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiResponseReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiResponseReference.cs
new file mode 100644
index 000000000..b1f8d53a9
--- /dev/null
+++ b/src/Microsoft.OpenApi/Models/References/OpenApiResponseReference.cs
@@ -0,0 +1,113 @@
+// 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.Properties;
+using Microsoft.OpenApi.Writers;
+
+namespace Microsoft.OpenApi.Models.References
+{
+ ///
+ /// Response Object Reference.
+ ///
+ internal class OpenApiResponseReference : OpenApiResponse
+ {
+ private OpenApiResponse _target;
+ private readonly OpenApiReference _reference;
+ private string _description;
+
+ private OpenApiResponse Target
+ {
+ get
+ {
+ _target ??= _reference.HostDocument.ResolveReferenceTo(_reference);
+ return _target;
+ }
+ }
+
+ ///
+ /// Constructor initializing the reference object.
+ ///
+ /// The reference Id.
+ /// The host OpenAPI document.
+ /// Optional: External resource in the reference.
+ /// It may be:
+ /// 1. a absolute/relative file path, for example: ../commons/pet.json
+ /// 2. a Url, for example: http://localhost/pet.json
+ ///
+ public OpenApiResponseReference(string referenceId, OpenApiDocument hostDocument, string externalResource = null)
+ {
+ if (string.IsNullOrEmpty(referenceId))
+ {
+ throw Error.Argument(nameof(referenceId), SRResource.ReferenceIdIsNullOrEmpty);
+ }
+ if (hostDocument == null)
+ {
+ throw Error.Argument(nameof(hostDocument), SRResource.HostDocumentIsNull);
+ }
+
+ _reference = new OpenApiReference()
+ {
+ Id = referenceId,
+ HostDocument = hostDocument,
+ Type = ReferenceType.Response,
+ ExternalResource = externalResource
+ };
+ }
+
+ ///
+ public override string Description
+ {
+ get => string.IsNullOrEmpty(_description) ? Target.Description : _description;
+ set => _description = value;
+ }
+
+ ///
+ public override IDictionary Content { get => Target.Content; set => Target.Content = value; }
+
+ ///
+ public override IDictionary Headers { get => Target.Headers; set => Target.Headers = value; }
+
+ ///
+ public override IDictionary Links { get => Target.Links; set => Target.Links = value; }
+
+ ///
+ public override IDictionary Extensions { get => Target.Extensions; set => Target.Extensions = value; }
+
+ ///
+ public override void SerializeAsV3(IOpenApiWriter writer)
+ {
+ SerializeInternal(writer, (writer, element) => element.SerializeAsV3WithoutReference(writer));
+ }
+
+ ///
+ public override void SerializeAsV31(IOpenApiWriter writer)
+ {
+ SerializeInternal(writer, (writer, element) => element.SerializeAsV31WithoutReference(writer));
+ }
+
+ ///
+ public override void SerializeAsV3WithoutReference(IOpenApiWriter writer)
+ {
+ SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0,
+ (writer, element) => element.SerializeAsV3(writer));
+ }
+
+ ///
+ public override void SerializeAsV31WithoutReference(IOpenApiWriter writer)
+ {
+ SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1,
+ (writer, element) => element.SerializeAsV31(writer));
+ }
+
+ ///
+ private void SerializeInternal(IOpenApiWriter writer,
+ Action action)
+ {
+ writer = writer ?? throw Error.ArgumentNull(nameof(writer));
+ action(writer, this);
+ }
+ }
+}
diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiSecuritySchemeReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiSecuritySchemeReference.cs
new file mode 100644
index 000000000..ace26b5e0
--- /dev/null
+++ b/src/Microsoft.OpenApi/Models/References/OpenApiSecuritySchemeReference.cs
@@ -0,0 +1,119 @@
+// 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.Properties;
+using Microsoft.OpenApi.Writers;
+
+namespace Microsoft.OpenApi.Models.References
+{
+ ///
+ /// Security Scheme Object Reference.
+ ///
+ internal class OpenApiSecuritySchemeReference : OpenApiSecurityScheme
+ {
+ private OpenApiSecurityScheme _target;
+ private readonly OpenApiReference _reference;
+ private string _description;
+
+ private OpenApiSecurityScheme Target
+ {
+ get
+ {
+ _target ??= _reference.HostDocument.ResolveReferenceTo(_reference);
+ return _target;
+ }
+ }
+
+ ///
+ /// Constructor initializing the reference object.
+ ///
+ /// The reference Id.
+ /// The host OpenAPI document.
+ public OpenApiSecuritySchemeReference(string referenceId, OpenApiDocument hostDocument)
+ {
+ if (string.IsNullOrEmpty(referenceId))
+ {
+ throw Error.Argument(nameof(referenceId), SRResource.ReferenceIdIsNullOrEmpty);
+ }
+ if (hostDocument == null)
+ {
+ throw Error.Argument(nameof(hostDocument), SRResource.HostDocumentIsNull);
+ }
+
+ _reference = new OpenApiReference()
+ {
+ Id = referenceId,
+ HostDocument = hostDocument,
+ Type = ReferenceType.SecurityScheme
+ };
+ }
+
+ ///
+ public override string Description
+ {
+ get => string.IsNullOrEmpty(_description) ? Target.Description : _description;
+ set => _description = value;
+ }
+
+ ///
+ public override string Name { get => Target.Name; set => Target.Name = value; }
+
+ ///
+ public override ParameterLocation In { get => Target.In; set => Target.In = value; }
+
+ ///
+ public override string Scheme { get => Target.Scheme; set => Target.Scheme = value; }
+
+ ///
+ public override string BearerFormat { get => Target.BearerFormat; set => Target.BearerFormat = value; }
+
+ ///
+ public override OpenApiOAuthFlows Flows { get => Target.Flows; set => Target.Flows = value; }
+
+ ///
+ public override Uri OpenIdConnectUrl { get => Target.OpenIdConnectUrl; set => Target.OpenIdConnectUrl = value; }
+
+ ///
+ public override IDictionary Extensions { get => Target.Extensions; set => Target.Extensions = value; }
+
+ ///
+ public override SecuritySchemeType Type { get => Target.Type; set => Target.Type = value; }
+
+ ///
+ public override void SerializeAsV3(IOpenApiWriter writer)
+ {
+ SerializeInternal(writer, SerializeAsV3WithoutReference);
+ }
+
+ ///
+ public override void SerializeAsV31(IOpenApiWriter writer)
+ {
+ SerializeInternal(writer, SerializeAsV31WithoutReference);
+ }
+
+ ///
+ public override void SerializeAsV3WithoutReference(IOpenApiWriter writer)
+ {
+ SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0,
+ (writer, element) => element.SerializeAsV3(writer));
+ }
+
+ ///
+ public override void SerializeAsV31WithoutReference(IOpenApiWriter writer)
+ {
+ SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1,
+ (writer, element) => element.SerializeAsV31(writer));
+ }
+
+ ///
+ private void SerializeInternal(IOpenApiWriter writer,
+ Action action)
+ {
+ writer = writer ?? throw Error.ArgumentNull(nameof(writer));
+ action(writer);
+ }
+ }
+}
diff --git a/src/Microsoft.OpenApi/Models/References/OpenApiTagReference.cs b/src/Microsoft.OpenApi/Models/References/OpenApiTagReference.cs
new file mode 100644
index 000000000..f79244564
--- /dev/null
+++ b/src/Microsoft.OpenApi/Models/References/OpenApiTagReference.cs
@@ -0,0 +1,103 @@
+// 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.Properties;
+using Microsoft.OpenApi.Writers;
+
+namespace Microsoft.OpenApi.Models.References
+{
+ ///
+ /// Tag Object Reference
+ ///
+ internal class OpenApiTagReference : OpenApiTag
+ {
+ private OpenApiTag _target;
+ private readonly OpenApiReference _reference;
+ private string _description;
+
+ private OpenApiTag Target
+ {
+ get
+ {
+ _target ??= _reference.HostDocument.ResolveReferenceTo(_reference);
+ return _target;
+ }
+ }
+
+ ///
+ /// Constructor initializing the reference object.
+ ///
+ /// The reference Id.
+ /// The host OpenAPI document.
+ public OpenApiTagReference(string referenceId, OpenApiDocument hostDocument)
+ {
+ if (string.IsNullOrEmpty(referenceId))
+ {
+ throw Error.Argument(nameof(referenceId), SRResource.ReferenceIdIsNullOrEmpty);
+ }
+ if (hostDocument == null)
+ {
+ throw Error.Argument(nameof(hostDocument), SRResource.HostDocumentIsNull);
+ }
+
+ _reference = new OpenApiReference()
+ {
+ Id = referenceId,
+ HostDocument = hostDocument,
+ Type = ReferenceType.Tag
+ };
+ }
+
+ ///
+ public override string Description
+ {
+ get => string.IsNullOrEmpty(_description) ? Target.Description : _description;
+ set => _description = value;
+ }
+
+ ///
+ public override OpenApiExternalDocs ExternalDocs { get => Target?.ExternalDocs; set => Target.ExternalDocs = value; }
+
+ ///
+ public override IDictionary Extensions { get => Target?.Extensions; set => Target.Extensions = value; }
+
+ ///
+ public override string Name { get => Target?.Name; set => Target.Name = value; }
+
+ ///
+ public override void SerializeAsV3(IOpenApiWriter writer)
+ {
+ SerializeInternal(writer);
+ }
+
+ ///
+ public override void SerializeAsV31(IOpenApiWriter writer)
+ {
+ SerializeInternal(writer);
+ }
+
+ ///
+ public override void SerializeAsV3WithoutReference(IOpenApiWriter writer)
+ {
+ SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_0,
+ (writer, element) => element.SerializeAsV3(writer));
+ }
+
+ ///
+ public override void SerializeAsV31WithoutReference(IOpenApiWriter writer)
+ {
+ SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1,
+ (writer, element) => element.SerializeAsV31(writer));
+ }
+
+ ///
+ private void SerializeInternal(IOpenApiWriter writer)
+ {
+ writer = writer ?? throw Error.ArgumentNull(nameof(writer));
+ writer.WriteValue(Name);
+ }
+ }
+}
diff --git a/src/Microsoft.OpenApi/Properties/SRResource.Designer.cs b/src/Microsoft.OpenApi/Properties/SRResource.Designer.cs
index 18f1a59d6..6c149fbf2 100644
--- a/src/Microsoft.OpenApi/Properties/SRResource.Designer.cs
+++ b/src/Microsoft.OpenApi/Properties/SRResource.Designer.cs
@@ -377,5 +377,27 @@ internal static string WorkspaceRequredForExternalReferenceResolution {
return ResourceManager.GetString("WorkspaceRequredForExternalReferenceResolution", resourceCulture);
}
}
+
+ ///
+ /// Looks up a localized string similar to The HostDocument is null..
+ ///
+ internal static string HostDocumentIsNull
+ {
+ get
+ {
+ return ResourceManager.GetString("HostDocumentIsNull", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to The identifier in the referenced element is null or empty ..
+ ///
+ internal static string ReferenceIdIsNullOrEmpty
+ {
+ get
+ {
+ return ResourceManager.GetString("ReferenceIdIsNullOrEmpty", resourceCulture);
+ }
+ }
}
}
diff --git a/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj b/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj
index 36369938b..1764637b8 100644
--- a/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj
+++ b/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj
@@ -54,6 +54,10 @@
+
+ OpenApiCallbackReferenceTests.cs
+
+
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..3bb0efa15
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,30 @@
+{
+ "{$request.body#/callbackUrl}": {
+ "post": {
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "message"
+ ],
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string",
+ "example": "Some event happened"
+ }
+ }
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "ok"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..63215a889
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"{$request.body#/callbackUrl}":{"post":{"requestBody":{"content":{"application/json":{"schema":{"required":["message"],"type":"object","properties":{"message":{"type":"string","example":"Some event happened"}}}}},"required":true},"responses":{"200":{"description":"ok"}}}}}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..3bb0efa15
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,30 @@
+{
+ "{$request.body#/callbackUrl}": {
+ "post": {
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "message"
+ ],
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string",
+ "example": "Some event happened"
+ }
+ }
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "ok"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..63215a889
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"{$request.body#/callbackUrl}":{"post":{"requestBody":{"content":{"application/json":{"schema":{"required":["message"],"type":"object","properties":{"message":{"type":"string","example":"Some event happened"}}}}},"required":true},"responses":{"200":{"description":"ok"}}}}}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.SerializeReferencedCallbackAsV31JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.SerializeReferencedCallbackAsV31JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..3bb0efa15
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.SerializeReferencedCallbackAsV31JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,30 @@
+{
+ "{$request.body#/callbackUrl}": {
+ "post": {
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "message"
+ ],
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string",
+ "example": "Some event happened"
+ }
+ }
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "ok"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.SerializeReferencedCallbackAsV31JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.SerializeReferencedCallbackAsV31JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..63215a889
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.SerializeReferencedCallbackAsV31JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"{$request.body#/callbackUrl}":{"post":{"requestBody":{"content":{"application/json":{"schema":{"required":["message"],"type":"object","properties":{"message":{"type":"string","example":"Some event happened"}}}}},"required":true},"responses":{"200":{"description":"ok"}}}}}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.SerializeReferencedCallbackAsV3JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.SerializeReferencedCallbackAsV3JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..3bb0efa15
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.SerializeReferencedCallbackAsV3JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,30 @@
+{
+ "{$request.body#/callbackUrl}": {
+ "post": {
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "required": [
+ "message"
+ ],
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string",
+ "example": "Some event happened"
+ }
+ }
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "ok"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.SerializeReferencedCallbackAsV3JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.SerializeReferencedCallbackAsV3JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..63215a889
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.SerializeReferencedCallbackAsV3JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"{$request.body#/callbackUrl}":{"post":{"requestBody":{"content":{"application/json":{"schema":{"required":["message"],"type":"object","properties":{"message":{"type":"string","example":"Some event happened"}}}}},"required":true},"responses":{"200":{"description":"ok"}}}}}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.cs
new file mode 100644
index 000000000..c2fd2b9db
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiCallbackReferenceTests.cs
@@ -0,0 +1,182 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license.
+
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi.Models.References;
+using Microsoft.OpenApi.Readers;
+using Microsoft.OpenApi.Writers;
+using VerifyXunit;
+using Xunit;
+
+namespace Microsoft.OpenApi.Tests.Models.References
+{
+ [Collection("DefaultSettings")]
+ [UsesVerify]
+ public class OpenApiCallbackReferenceTests
+ {
+ private const string OpenApi = @"
+openapi: 3.0.0
+info:
+ title: Callback with ref Example
+ version: 1.0.0
+paths:
+ /register:
+ post:
+ summary: Subscribe to a webhook
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ callbackUrl: # Callback URL
+ type: string
+ format: uri
+ example: https://myserver.com/send/callback/here
+ required:
+ - callbackUrl
+ responses:
+ '200':
+ description: subscription successfully created
+ content:
+ application/json:
+ schema:
+ type: object
+ description: subscription information
+ required:
+ - subscriptionId
+ properties:
+ subscriptionId:
+ description: unique identifier
+ type: string
+ example: 2531329f-fb09-4ef7-887e-84e648214436
+ callbacks:
+ myEvent:
+ $ref: '#/components/callbacks/callbackEvent'
+components:
+ callbacks:
+ callbackEvent:
+ '{$request.body#/callbackUrl}':
+ post:
+ requestBody: # Contents of the callback message
+ required: true
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ message:
+ type: string
+ example: Some event happened
+ required:
+ - message
+ responses:
+ '200':
+ description: ok";
+
+ private const string OpenApi_2 = @"
+openapi: 3.0.0
+info:
+ title: Callback with ref Example
+ version: 1.0.0
+paths:
+ /register:
+ post:
+ summary: Subscribe to a webhook
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ callbackUrl: # Callback URL
+ type: string
+ format: uri
+ example: https://myserver.com/send/callback/here
+ required:
+ - callbackUrl
+ responses:
+ '200':
+ description: subscription successfully created
+ content:
+ application/json:
+ schema:
+ type: object
+ description: subscription information
+ required:
+ - subscriptionId
+ properties:
+ subscriptionId:
+ description: unique identifier
+ type: string
+ example: 2531329f-fb09-4ef7-887e-84e648214436
+ callbacks:
+ myEvent:
+ $ref: '#/components/callbacks/callbackEvent'
+";
+
+ private readonly OpenApiCallbackReference _localCallbackReference;
+ private readonly OpenApiCallbackReference _externalCallbackReference;
+
+ public OpenApiCallbackReferenceTests()
+ {
+ var reader = new OpenApiStringReader();
+ OpenApiDocument openApiDoc = reader.Read(OpenApi, out _);
+ OpenApiDocument openApiDoc_2 = reader.Read(OpenApi_2, out _);
+ openApiDoc_2.Workspace = new();
+ openApiDoc_2.Workspace.AddDocument("http://localhost/callbackreference", openApiDoc);
+ _localCallbackReference = new("callbackEvent", openApiDoc);
+ _externalCallbackReference = new("callbackEvent", openApiDoc_2, "http://localhost/callbackreference");
+ }
+
+ [Fact]
+ public void CallbackReferenceResolutionWorks()
+ {
+ // Assert
+ Assert.NotEmpty(_localCallbackReference.PathItems);
+ Assert.NotEmpty(_externalCallbackReference.PathItems);
+ Assert.Equal("{$request.body#/callbackUrl}", _localCallbackReference.PathItems.First().Key.Expression);
+ Assert.Equal("{$request.body#/callbackUrl}", _externalCallbackReference.PathItems.First().Key.Expression);
+ }
+
+ [Theory]
+ [InlineData(true)]
+ [InlineData(false)]
+ public async Task SerializeCallbackReferenceAsV3JsonWorks(bool produceTerseOutput)
+ {
+ // Arrange
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput });
+
+ // Act
+ _localCallbackReference.SerializeAsV3(writer);
+ writer.Flush();
+
+ // Assert
+ await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
+ }
+
+ [Theory]
+ [InlineData(true)]
+ [InlineData(false)]
+ public async Task SerializeCallbackReferenceAsV31JsonWorks(bool produceTerseOutput)
+ {
+ // Arrange
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput });
+
+ // Act
+ _localCallbackReference.SerializeAsV31(writer);
+ writer.Flush();
+
+ // Assert
+ await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
+ }
+ }
+}
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..f71202885
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,10 @@
+{
+ "summary": "Example of a user",
+ "description": "This is is an example of a user",
+ "value": [
+ {
+ "id": "1",
+ "name": "John Doe"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..cddf257f8
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"summary":"Example of a user","description":"This is is an example of a user","value":[{"id":"1","name":"John Doe"}]}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..f71202885
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,10 @@
+{
+ "summary": "Example of a user",
+ "description": "This is is an example of a user",
+ "value": [
+ {
+ "id": "1",
+ "name": "John Doe"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..cddf257f8
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"summary":"Example of a user","description":"This is is an example of a user","value":[{"id":"1","name":"John Doe"}]}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.SerializeExampleReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.SerializeExampleReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..8d9c12611
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.SerializeExampleReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,10 @@
+{
+ "summary": "Example of a user",
+ "description": "This is is an example of a user",
+ "value": [
+ {
+ "id": 1,
+ "name": "John Doe"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.SerializeExampleReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.SerializeExampleReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..c1549bf7c
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.SerializeExampleReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"summary":"Example of a user","description":"This is is an example of a user","value":[{"id":1,"name":"John Doe"}]}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.SerializeExampleReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.SerializeExampleReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..8d9c12611
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.SerializeExampleReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,10 @@
+{
+ "summary": "Example of a user",
+ "description": "This is is an example of a user",
+ "value": [
+ {
+ "id": 1,
+ "name": "John Doe"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.SerializeExampleReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.SerializeExampleReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..c1549bf7c
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.SerializeExampleReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"summary":"Example of a user","description":"This is is an example of a user","value":[{"id":1,"name":"John Doe"}]}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.cs
new file mode 100644
index 000000000..5ef061cbb
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiExampleReferenceTests.cs
@@ -0,0 +1,159 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license.
+
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi.Models.References;
+using Microsoft.OpenApi.Readers;
+using Microsoft.OpenApi.Writers;
+using VerifyXunit;
+using Xunit;
+
+namespace Microsoft.OpenApi.Tests.Models.References
+{
+ [Collection("DefaultSettings")]
+ [UsesVerify]
+ public class OpenApiExampleReferenceTests
+ {
+ private const string OpenApi = @"
+openapi: 3.0.0
+info:
+ title: Sample API
+ version: 1.0.0
+paths:
+ /users:
+ get:
+ summary: Get users
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/User'
+ examples:
+ - $ref: '#/components/examples/UserExample'
+components:
+ schemas:
+ User:
+ type: object
+ properties:
+ id:
+ type: integer
+ name:
+ type: string
+ examples:
+ UserExample:
+ summary: Example of a user
+ description: This is is an example of a user
+ value:
+ - id: 1
+ name: John Doe
+";
+
+ private const string OpenApi_2 = @"
+openapi: 3.0.0
+info:
+ title: Sample API
+ version: 1.0.0
+paths:
+ /users:
+ get:
+ summary: Get users
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/User'
+ examples:
+ - $ref: '#/components/examples/UserExample'
+";
+
+ private readonly OpenApiExampleReference _localExampleReference;
+ private readonly OpenApiExampleReference _externalExampleReference;
+ private readonly OpenApiDocument _openApiDoc;
+ private readonly OpenApiDocument _openApiDoc_2;
+
+ public OpenApiExampleReferenceTests()
+ {
+ var reader = new OpenApiStringReader();
+ _openApiDoc = reader.Read(OpenApi, out _);
+ _openApiDoc_2 = reader.Read(OpenApi_2, out _);
+ _openApiDoc_2.Workspace = new();
+ _openApiDoc_2.Workspace.AddDocument("http://localhost/examplereference", _openApiDoc);
+
+ _localExampleReference = new OpenApiExampleReference("UserExample", _openApiDoc)
+ {
+ Summary = "Example of a local user",
+ Description = "This is an example of a local user"
+ };
+
+ _externalExampleReference = new OpenApiExampleReference("UserExample", _openApiDoc_2, "http://localhost/examplereference")
+ {
+ Summary = "Example of an external user",
+ Description = "This is an example of an external user"
+ };
+ }
+
+ [Fact]
+ public void ExampleReferenceResolutionWorks()
+ {
+ // Assert
+ Assert.Equal("Example of a local user", _localExampleReference.Summary);
+ Assert.Equal("This is an example of a local user", _localExampleReference.Description);
+ Assert.NotNull(_localExampleReference.Value);
+
+ Assert.Equal("Example of an external user", _externalExampleReference.Summary);
+ Assert.Equal("This is an example of an external user", _externalExampleReference.Description);
+ Assert.NotNull(_externalExampleReference.Value);
+
+ // The main description and summary values shouldn't change
+ Assert.Equal("Example of a user", _openApiDoc.Components.Examples.First().Value.Summary);
+ Assert.Equal("This is is an example of a user",
+ _openApiDoc.Components.Examples.First().Value.Description);
+ }
+
+ [Theory]
+ [InlineData(true)]
+ [InlineData(false)]
+ public async Task SerializeExampleReferenceAsV3JsonWorks(bool produceTerseOutput)
+ {
+ // Arrange
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput });
+
+ // Act
+ _localExampleReference.SerializeAsV3(writer);
+ writer.Flush();
+
+ // Assert
+ await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
+ }
+
+ [Theory]
+ [InlineData(true)]
+ [InlineData(false)]
+ public async Task SerializeExampleReferenceAsV31JsonWorks(bool produceTerseOutput)
+ {
+ // Arrange
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput });
+
+ // Act
+ _localExampleReference.SerializeAsV31(writer);
+ writer.Flush();
+
+ // Assert
+ await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
+ }
+ }
+}
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..f43e25a40
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,6 @@
+{
+ "description": "The URL of the newly created post",
+ "schema": {
+ "type": "string"
+ }
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..1b29be17d
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"description":"The URL of the newly created post","schema":{"type":"string"}}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..f43e25a40
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,6 @@
+{
+ "description": "The URL of the newly created post",
+ "schema": {
+ "type": "string"
+ }
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..1b29be17d
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"description":"The URL of the newly created post","schema":{"type":"string"}}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeHeaderReferenceAsV2JsonWorksAsync_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeHeaderReferenceAsV2JsonWorksAsync_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..8b29b212e
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeHeaderReferenceAsV2JsonWorksAsync_produceTerseOutput=False.verified.txt
@@ -0,0 +1,4 @@
+{
+ "description": "Location of the locally created post",
+ "type": "string"
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeHeaderReferenceAsV2JsonWorksAsync_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeHeaderReferenceAsV2JsonWorksAsync_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..243908873
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeHeaderReferenceAsV2JsonWorksAsync_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"description":"Location of the locally created post","type":"string"}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeHeaderReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeHeaderReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..f43e25a40
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeHeaderReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,6 @@
+{
+ "description": "The URL of the newly created post",
+ "schema": {
+ "type": "string"
+ }
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeHeaderReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeHeaderReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..1b29be17d
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeHeaderReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"description":"The URL of the newly created post","schema":{"type":"string"}}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeHeaderReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeHeaderReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..f43e25a40
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeHeaderReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,6 @@
+{
+ "description": "The URL of the newly created post",
+ "schema": {
+ "type": "string"
+ }
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeHeaderReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeHeaderReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..1b29be17d
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeHeaderReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"description":"The URL of the newly created post","schema":{"type":"string"}}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeParameterReferenceAsV2JsonWorksAsync_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeParameterReferenceAsV2JsonWorksAsync_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..8b29b212e
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeParameterReferenceAsV2JsonWorksAsync_produceTerseOutput=False.verified.txt
@@ -0,0 +1,4 @@
+{
+ "description": "Location of the locally created post",
+ "type": "string"
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeParameterReferenceAsV2JsonWorksAsync_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeParameterReferenceAsV2JsonWorksAsync_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..243908873
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.SerializeParameterReferenceAsV2JsonWorksAsync_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"description":"Location of the locally created post","type":"string"}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.cs
new file mode 100644
index 000000000..3ab1895d1
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.cs
@@ -0,0 +1,146 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license.
+
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi.Models.References;
+using Microsoft.OpenApi.Readers;
+using Microsoft.OpenApi.Writers;
+using VerifyXunit;
+using Xunit;
+
+namespace Microsoft.OpenApi.Tests.Models.References
+{
+ [Collection("DefaultSettings")]
+ [UsesVerify]
+ public class OpenApiHeaderReferenceTests
+ {
+ private const string OpenApi= @"
+openapi: 3.0.0
+info:
+ title: Sample API
+ version: 1.0.0
+paths:
+ /users:
+ post:
+ summary: Create a post
+ responses:
+ '201':
+ description: Post created successfully
+ headers:
+ Location:
+ $ref: '#/components/headers/LocationHeader'
+components:
+ headers:
+ LocationHeader:
+ description: The URL of the newly created post
+ schema:
+ type: string
+";
+
+ private const string OpenApi_2 = @"
+openapi: 3.0.0
+info:
+ title: Sample API
+ version: 1.0.0
+paths:
+ /users:
+ post:
+ summary: Create a post
+ responses:
+ '201':
+ description: Post created successfully
+ headers:
+ Location:
+ $ref: '#/components/headers/LocationHeader'
+";
+
+ private readonly OpenApiHeaderReference _localHeaderReference;
+ private readonly OpenApiHeaderReference _externalHeaderReference;
+ private readonly OpenApiDocument _openApiDoc;
+ private readonly OpenApiDocument _openApiDoc_2;
+
+ public OpenApiHeaderReferenceTests()
+ {
+ var reader = new OpenApiStringReader();
+ _openApiDoc = reader.Read(OpenApi, out _);
+ _openApiDoc_2 = reader.Read(OpenApi_2, out _);
+ _openApiDoc_2.Workspace = new();
+ _openApiDoc_2.Workspace.AddDocument("http://localhost/headerreference", _openApiDoc);
+
+ _localHeaderReference = new OpenApiHeaderReference("LocationHeader", _openApiDoc)
+ {
+ Description = "Location of the locally created post"
+ };
+
+ _externalHeaderReference = new OpenApiHeaderReference("LocationHeader", _openApiDoc_2, "http://localhost/headerreference")
+ {
+ Description = "Location of the external created post"
+ };
+ }
+
+ [Fact]
+ public void HeaderReferenceResolutionWorks()
+ {
+ // Assert
+ Assert.Equal("Location of the locally created post", _localHeaderReference.Description);
+ Assert.Equal("Location of the external created post", _externalHeaderReference.Description);
+ Assert.Equal("The URL of the newly created post",
+ _openApiDoc.Components.Headers.First().Value.Description); // The main description value shouldn't change
+ }
+
+ [Theory]
+ [InlineData(true)]
+ [InlineData(false)]
+ public async Task SerializeHeaderReferenceAsV3JsonWorks(bool produceTerseOutput)
+ {
+ // Arrange
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput });
+
+ // Act
+ _localHeaderReference.SerializeAsV3(writer);
+ writer.Flush();
+
+ // Assert
+ await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
+ }
+
+ [Theory]
+ [InlineData(true)]
+ [InlineData(false)]
+ public async Task SerializeHeaderReferenceAsV31JsonWorks(bool produceTerseOutput)
+ {
+ // Arrange
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput });
+
+ // Act
+ _localHeaderReference.SerializeAsV31(writer);
+ writer.Flush();
+
+ // Assert
+ await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
+ }
+
+ [Theory]
+ [InlineData(true)]
+ [InlineData(false)]
+ public async Task SerializeHeaderReferenceAsV2JsonWorksAsync(bool produceTerseOutput)
+ {
+ // Arrange
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput });
+
+ // Act
+ _localHeaderReference.SerializeAsV2(writer);
+ writer.Flush();
+
+ // Assert
+ await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
+ }
+ }
+}
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..6fe727ea0
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,7 @@
+{
+ "operationId": "getUser",
+ "parameters": {
+ "userId": "$response.body#/id"
+ },
+ "description": "The id value returned in the response can be used as the userId parameter in GET /users/{userId}"
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..e3df412e9
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"operationId":"getUser","parameters":{"userId":"$response.body#/id"},"description":"The id value returned in the response can be used as the userId parameter in GET /users/{userId}"}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..6fe727ea0
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,7 @@
+{
+ "operationId": "getUser",
+ "parameters": {
+ "userId": "$response.body#/id"
+ },
+ "description": "The id value returned in the response can be used as the userId parameter in GET /users/{userId}"
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..e3df412e9
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"operationId":"getUser","parameters":{"userId":"$response.body#/id"},"description":"The id value returned in the response can be used as the userId parameter in GET /users/{userId}"}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.SerializeLinkReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.SerializeLinkReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..6fe727ea0
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.SerializeLinkReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,7 @@
+{
+ "operationId": "getUser",
+ "parameters": {
+ "userId": "$response.body#/id"
+ },
+ "description": "The id value returned in the response can be used as the userId parameter in GET /users/{userId}"
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.SerializeLinkReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.SerializeLinkReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..e3df412e9
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.SerializeLinkReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"operationId":"getUser","parameters":{"userId":"$response.body#/id"},"description":"The id value returned in the response can be used as the userId parameter in GET /users/{userId}"}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.SerializeLinkReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.SerializeLinkReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..6fe727ea0
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.SerializeLinkReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,7 @@
+{
+ "operationId": "getUser",
+ "parameters": {
+ "userId": "$response.body#/id"
+ },
+ "description": "The id value returned in the response can be used as the userId parameter in GET /users/{userId}"
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.SerializeLinkReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.SerializeLinkReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..e3df412e9
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.SerializeLinkReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"operationId":"getUser","parameters":{"userId":"$response.body#/id"},"description":"The id value returned in the response can be used as the userId parameter in GET /users/{userId}"}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.cs
new file mode 100644
index 000000000..ccd4d3de6
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiLinkReferenceTests.cs
@@ -0,0 +1,165 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license.
+
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi.Models.References;
+using Microsoft.OpenApi.Readers;
+using Microsoft.OpenApi.Writers;
+using VerifyXunit;
+using Xunit;
+
+namespace Microsoft.OpenApi.Tests.Models.References
+{
+ [Collection("DefaultSettings")]
+ [UsesVerify]
+ public class OpenApiLinkReferenceTests
+ {
+ private const string OpenApi = @"
+openapi: 3.0.0
+info:
+ version: 0.0.0
+ title: Links example
+paths:
+ /users:
+ post:
+ summary: Creates a user and returns the user ID
+ operationId: createUser
+ requestBody:
+ required: true
+ description: A JSON object that contains the user name and age.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/User'
+ responses:
+ '201':
+ description: Created
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ id:
+ type: integer
+ format: int64
+ description: ID of the created user.
+ links:
+ GetUserByUserId:
+ $ref: '#/components/links/GetUserByUserId' # <---- referencing the link here
+components:
+ links:
+ GetUserByUserId:
+ operationId: getUser
+ parameters:
+ userId: '$response.body#/id'
+ description: The id value returned in the response can be used as the userId parameter in GET /users/{userId}";
+
+ private const string OpenApi_2 = @"
+openapi: 3.0.0
+info:
+ version: 0.0.0
+ title: Links example
+paths:
+ /users:
+ post:
+ summary: Creates a user and returns the user ID
+ operationId: createUser
+ requestBody:
+ required: true
+ description: A JSON object that contains the user name and age.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/User'
+ responses:
+ '201':
+ description: Created
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ id:
+ type: integer
+ format: int64
+ description: ID of the created user.
+ links:
+ GetUserByUserId:
+ $ref: '#/components/links/GetUserByUserId' # <---- referencing the link here
+";
+
+ private readonly OpenApiLinkReference _localLinkReference;
+ private readonly OpenApiLinkReference _externalLinkReference;
+ private readonly OpenApiDocument _openApiDoc;
+ private readonly OpenApiDocument _openApiDoc_2;
+
+ public OpenApiLinkReferenceTests()
+ {
+ var reader = new OpenApiStringReader();
+ _openApiDoc = reader.Read(OpenApi, out _);
+ _openApiDoc_2 = reader.Read(OpenApi_2, out _);
+ _openApiDoc_2.Workspace = new();
+ _openApiDoc_2.Workspace.AddDocument("http://localhost/linkreferencesample", _openApiDoc);
+
+ _localLinkReference = new("GetUserByUserId", _openApiDoc)
+ {
+ Description = "Use the id returned as the userId in `GET /users/{userId}`"
+ };
+
+ _externalLinkReference = new("GetUserByUserId", _openApiDoc_2, "http://localhost/linkreferencesample")
+ {
+ Description = "Externally referenced: Use the id returned as the userId in `GET /users/{userId}`"
+ };
+ }
+
+ [Fact]
+ public void LinkReferenceResolutionWorks()
+ {
+ // Assert
+ Assert.Equal("Use the id returned as the userId in `GET /users/{userId}`", _localLinkReference.Description);
+ Assert.Equal("getUser", _localLinkReference.OperationId);
+ Assert.Equal("userId", _localLinkReference.Parameters.First().Key);
+ Assert.Equal("Externally referenced: Use the id returned as the userId in `GET /users/{userId}`", _externalLinkReference.Description);
+ Assert.Equal("The id value returned in the response can be used as the userId parameter in GET /users/{userId}",
+ _openApiDoc.Components.Links.First().Value.Description); // The main description value shouldn't change
+ }
+
+ [Theory]
+ [InlineData(true)]
+ [InlineData(false)]
+ public async Task SerializeLinkReferenceAsV3JsonWorks(bool produceTerseOutput)
+ {
+ // Arrange
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput });
+
+ // Act
+ _localLinkReference.SerializeAsV3(writer);
+ writer.Flush();
+
+ // Assert
+ await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
+ }
+
+ [Theory]
+ [InlineData(true)]
+ [InlineData(false)]
+ public async Task SerializeLinkReferenceAsV31JsonWorks(bool produceTerseOutput)
+ {
+ // Arrange
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput });
+
+ // Act
+ _localLinkReference.SerializeAsV31(writer);
+ writer.Flush();
+
+ // Assert
+ await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
+ }
+ }
+}
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeParameterReferenceAsV2JsonWorksAsync_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeParameterReferenceAsV2JsonWorksAsync_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..2a64ba6d9
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeParameterReferenceAsV2JsonWorksAsync_produceTerseOutput=False.verified.txt
@@ -0,0 +1,8 @@
+{
+ "in": "query",
+ "name": "limit",
+ "description": "Results to return",
+ "type": "integer",
+ "maximum": 100,
+ "minimum": 1
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeParameterReferenceAsV2JsonWorksAsync_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeParameterReferenceAsV2JsonWorksAsync_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..8d3cb1803
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeParameterReferenceAsV2JsonWorksAsync_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"in":"query","name":"limit","description":"Results to return","type":"integer","maximum":100,"minimum":1}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeParameterReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeParameterReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..f0066344e
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeParameterReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,10 @@
+{
+ "name": "limit",
+ "in": "query",
+ "description": "Number of results to return",
+ "schema": {
+ "maximum": 100,
+ "minimum": 1,
+ "type": "integer"
+ }
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeParameterReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeParameterReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..2b7ff1cfb
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeParameterReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"name":"limit","in":"query","description":"Number of results to return","schema":{"maximum":100,"minimum":1,"type":"integer"}}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeParameterReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeParameterReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..f0066344e
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeParameterReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,10 @@
+{
+ "name": "limit",
+ "in": "query",
+ "description": "Number of results to return",
+ "schema": {
+ "maximum": 100,
+ "minimum": 1,
+ "type": "integer"
+ }
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeParameterReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeParameterReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..2b7ff1cfb
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeParameterReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"name":"limit","in":"query","description":"Number of results to return","schema":{"maximum":100,"minimum":1,"type":"integer"}}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeReferencedParameterAsV2JsonWorksAsync_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeReferencedParameterAsV2JsonWorksAsync_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..2a64ba6d9
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeReferencedParameterAsV2JsonWorksAsync_produceTerseOutput=False.verified.txt
@@ -0,0 +1,8 @@
+{
+ "in": "query",
+ "name": "limit",
+ "description": "Results to return",
+ "type": "integer",
+ "maximum": 100,
+ "minimum": 1
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeReferencedParameterAsV2JsonWorksAsync_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeReferencedParameterAsV2JsonWorksAsync_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..8d3cb1803
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeReferencedParameterAsV2JsonWorksAsync_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"in":"query","name":"limit","description":"Results to return","type":"integer","maximum":100,"minimum":1}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeReferencedParameterAsV3JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeReferencedParameterAsV3JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..cd30a5fc2
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeReferencedParameterAsV3JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,10 @@
+{
+ "name": "limit",
+ "in": "query",
+ "description": "Results to return",
+ "schema": {
+ "maximum": 100,
+ "minimum": 1,
+ "type": "integer"
+ }
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeReferencedParameterAsV3JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeReferencedParameterAsV3JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..da4f04c14
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.SerializeReferencedParameterAsV3JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"name":"limit","in":"query","description":"Results to return","schema":{"maximum":100,"minimum":1,"type":"integer"}}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.cs
new file mode 100644
index 000000000..593c76761
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiParameterReferenceTests.cs
@@ -0,0 +1,148 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license.
+
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi.Models.References;
+using Microsoft.OpenApi.Readers;
+using Microsoft.OpenApi.Writers;
+using VerifyXunit;
+using Xunit;
+
+namespace Microsoft.OpenApi.Tests.Models.References
+{
+ [Collection("DefaultSettings")]
+ [UsesVerify]
+ public class OpenApiParameterReferenceTests
+ {
+ private const string OpenApi = @"
+openapi: 3.0.0
+info:
+ title: Sample API
+ version: 1.0.0
+paths:
+ /users:
+ get:
+ summary: Get users
+ parameters:
+ - $ref: '#/components/parameters/limitParam'
+ responses:
+ 200:
+ description: Successful operation
+components:
+ parameters:
+ limitParam:
+ name: limit
+ in: query
+ description: Number of results to return
+ schema:
+ type: integer
+ minimum: 1
+ maximum: 100
+";
+
+ private const string OpenApi_2 = @"
+openapi: 3.0.0
+info:
+ title: Sample API
+ version: 1.0.0
+paths:
+ /users:
+ get:
+ summary: Get users
+ parameters:
+ - $ref: '#/components/parameters/limitParam'
+ responses:
+ 200:
+ description: Successful operation
+";
+ private readonly OpenApiParameterReference _localParameterReference;
+ private readonly OpenApiParameterReference _externalParameterReference;
+ private readonly OpenApiDocument _openApiDoc;
+ private readonly OpenApiDocument _openApiDoc_2;
+
+ public OpenApiParameterReferenceTests()
+ {
+ var reader = new OpenApiStringReader();
+ _openApiDoc = reader.Read(OpenApi, out _);
+ _openApiDoc_2 = reader.Read(OpenApi_2, out _);
+ _openApiDoc_2.Workspace = new();
+ _openApiDoc_2.Workspace.AddDocument("http://localhost/parameterreference", _openApiDoc);
+
+ _localParameterReference = new("limitParam", _openApiDoc)
+ {
+ Description = "Results to return"
+ };
+
+ _externalParameterReference = new OpenApiParameterReference("limitParam", _openApiDoc_2, "http://localhost/parameterreference")
+ {
+ Description = "Externally referenced: Results to return"
+ };
+ }
+
+ [Fact]
+ public void ParameterReferenceResolutionWorks()
+ {
+ // Assert
+ Assert.Equal("limit", _localParameterReference.Name);
+ Assert.Equal("Results to return", _localParameterReference.Description);
+ Assert.Equal("Externally referenced: Results to return", _externalParameterReference.Description);
+ Assert.Equal("Number of results to return",
+ _openApiDoc.Components.Parameters.First().Value.Description); // The main description value shouldn't change
+ }
+
+ [Theory]
+ [InlineData(true)]
+ [InlineData(false)]
+ public async Task SerializeParameterReferenceAsV3JsonWorks(bool produceTerseOutput)
+ {
+ // Arrange
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput });
+
+ // Act
+ _localParameterReference.SerializeAsV3(writer);
+ writer.Flush();
+
+ // Assert
+ await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
+ }
+
+ [Theory]
+ [InlineData(true)]
+ [InlineData(false)]
+ public async Task SerializeParameterReferenceAsV31JsonWorks(bool produceTerseOutput)
+ {
+ // Arrange
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput });
+
+ // Act
+ _localParameterReference.SerializeAsV31(writer);
+ writer.Flush();
+
+ // Assert
+ await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
+ }
+
+ [Theory]
+ [InlineData(true)]
+ [InlineData(false)]
+ public async Task SerializeParameterReferenceAsV2JsonWorksAsync(bool produceTerseOutput)
+ {
+ // Arrange
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput });
+
+ // Act
+ _localParameterReference.SerializeAsV2(writer);
+ writer.Flush();
+
+ // Assert
+ await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
+ }
+ }
+}
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..844f5ee81
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,28 @@
+{
+ "summary": "User path item summary",
+ "description": "User path item description",
+ "get": {
+ "summary": "Get users",
+ "responses": {
+ "200": {
+ "description": "Successful operation"
+ }
+ }
+ },
+ "post": {
+ "summary": "Create a user",
+ "responses": {
+ "201": {
+ "description": "User created successfully"
+ }
+ }
+ },
+ "delete": {
+ "summary": "Delete a user",
+ "responses": {
+ "204": {
+ "description": "User deleted successfully"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..f43044ef8
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializeCallbackReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"summary":"User path item summary","description":"User path item description","get":{"summary":"Get users","responses":{"200":{"description":"Successful operation"}}},"post":{"summary":"Create a user","responses":{"201":{"description":"User created successfully"}}},"delete":{"summary":"Delete a user","responses":{"204":{"description":"User deleted successfully"}}}}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..844f5ee81
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,28 @@
+{
+ "summary": "User path item summary",
+ "description": "User path item description",
+ "get": {
+ "summary": "Get users",
+ "responses": {
+ "200": {
+ "description": "Successful operation"
+ }
+ }
+ },
+ "post": {
+ "summary": "Create a user",
+ "responses": {
+ "201": {
+ "description": "User created successfully"
+ }
+ }
+ },
+ "delete": {
+ "summary": "Delete a user",
+ "responses": {
+ "204": {
+ "description": "User deleted successfully"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..f43044ef8
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializeCallbackReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"summary":"User path item summary","description":"User path item description","get":{"summary":"Get users","responses":{"200":{"description":"Successful operation"}}},"post":{"summary":"Create a user","responses":{"201":{"description":"User created successfully"}}},"delete":{"summary":"Delete a user","responses":{"204":{"description":"User deleted successfully"}}}}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializeParameterReferenceAsV2JsonWorksAsync_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializeParameterReferenceAsV2JsonWorksAsync_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..86685c051
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializeParameterReferenceAsV2JsonWorksAsync_produceTerseOutput=False.verified.txt
@@ -0,0 +1,28 @@
+{
+ "get": {
+ "summary": "Get users",
+ "responses": {
+ "200": {
+ "description": "Successful operation"
+ }
+ }
+ },
+ "post": {
+ "summary": "Create a user",
+ "responses": {
+ "201": {
+ "description": "User created successfully"
+ }
+ }
+ },
+ "delete": {
+ "summary": "Delete a user",
+ "responses": {
+ "204": {
+ "description": "User deleted successfully"
+ }
+ }
+ },
+ "x-summary": "Local reference: User path item summary",
+ "x-description": "Local reference: User path item description"
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializeParameterReferenceAsV2JsonWorksAsync_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializeParameterReferenceAsV2JsonWorksAsync_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..efa477cae
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializeParameterReferenceAsV2JsonWorksAsync_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"get":{"summary":"Get users","responses":{"200":{"description":"Successful operation"}}},"post":{"summary":"Create a user","responses":{"201":{"description":"User created successfully"}}},"delete":{"summary":"Delete a user","responses":{"204":{"description":"User deleted successfully"}}},"x-summary":"Local reference: User path item summary","x-description":"Local reference: User path item description"}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializePathItemReferenceAsV2JsonWorksAsync_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializePathItemReferenceAsV2JsonWorksAsync_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..86685c051
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializePathItemReferenceAsV2JsonWorksAsync_produceTerseOutput=False.verified.txt
@@ -0,0 +1,28 @@
+{
+ "get": {
+ "summary": "Get users",
+ "responses": {
+ "200": {
+ "description": "Successful operation"
+ }
+ }
+ },
+ "post": {
+ "summary": "Create a user",
+ "responses": {
+ "201": {
+ "description": "User created successfully"
+ }
+ }
+ },
+ "delete": {
+ "summary": "Delete a user",
+ "responses": {
+ "204": {
+ "description": "User deleted successfully"
+ }
+ }
+ },
+ "x-summary": "Local reference: User path item summary",
+ "x-description": "Local reference: User path item description"
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializePathItemReferenceAsV2JsonWorksAsync_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializePathItemReferenceAsV2JsonWorksAsync_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..efa477cae
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializePathItemReferenceAsV2JsonWorksAsync_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"get":{"summary":"Get users","responses":{"200":{"description":"Successful operation"}}},"post":{"summary":"Create a user","responses":{"201":{"description":"User created successfully"}}},"delete":{"summary":"Delete a user","responses":{"204":{"description":"User deleted successfully"}}},"x-summary":"Local reference: User path item summary","x-description":"Local reference: User path item description"}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializePathItemReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializePathItemReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..844f5ee81
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializePathItemReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,28 @@
+{
+ "summary": "User path item summary",
+ "description": "User path item description",
+ "get": {
+ "summary": "Get users",
+ "responses": {
+ "200": {
+ "description": "Successful operation"
+ }
+ }
+ },
+ "post": {
+ "summary": "Create a user",
+ "responses": {
+ "201": {
+ "description": "User created successfully"
+ }
+ }
+ },
+ "delete": {
+ "summary": "Delete a user",
+ "responses": {
+ "204": {
+ "description": "User deleted successfully"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializePathItemReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializePathItemReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..f43044ef8
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializePathItemReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"summary":"User path item summary","description":"User path item description","get":{"summary":"Get users","responses":{"200":{"description":"Successful operation"}}},"post":{"summary":"Create a user","responses":{"201":{"description":"User created successfully"}}},"delete":{"summary":"Delete a user","responses":{"204":{"description":"User deleted successfully"}}}}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializePathItemReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializePathItemReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..844f5ee81
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializePathItemReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,28 @@
+{
+ "summary": "User path item summary",
+ "description": "User path item description",
+ "get": {
+ "summary": "Get users",
+ "responses": {
+ "200": {
+ "description": "Successful operation"
+ }
+ }
+ },
+ "post": {
+ "summary": "Create a user",
+ "responses": {
+ "201": {
+ "description": "User created successfully"
+ }
+ }
+ },
+ "delete": {
+ "summary": "Delete a user",
+ "responses": {
+ "204": {
+ "description": "User deleted successfully"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializePathItemReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializePathItemReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..f43044ef8
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.SerializePathItemReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"summary":"User path item summary","description":"User path item description","get":{"summary":"Get users","responses":{"200":{"description":"Successful operation"}}},"post":{"summary":"Create a user","responses":{"201":{"description":"User created successfully"}}},"delete":{"summary":"Delete a user","responses":{"204":{"description":"User deleted successfully"}}}}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.cs
new file mode 100644
index 000000000..86a82aacc
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiPathItemReferenceTests.cs
@@ -0,0 +1,157 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license.
+
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi.Models.References;
+using Microsoft.OpenApi.Readers;
+using Microsoft.OpenApi.Writers;
+using VerifyXunit;
+using Xunit;
+
+namespace Microsoft.OpenApi.Tests.Models.References
+{
+ [Collection("DefaultSettings")]
+ [UsesVerify]
+ public class OpenApiPathItemReferenceTests
+ {
+ private const string OpenApi = @"
+openapi: 3.0.0
+info:
+ title: Sample API
+ version: 1.0.0
+paths:
+ /users:
+ $ref: '#/components/pathItems/userPathItem'
+
+components:
+ pathItems:
+ userPathItem:
+ description: User path item description
+ summary: User path item summary
+ get:
+ summary: Get users
+ responses:
+ 200:
+ description: Successful operation
+ post:
+ summary: Create a user
+ responses:
+ 201:
+ description: User created successfully
+ delete:
+ summary: Delete a user
+ responses:
+ 204:
+ description: User deleted successfully
+";
+
+ private const string OpenApi_2 = @"
+openapi: 3.0.0
+info:
+ title: Sample API
+ version: 1.0.0
+paths:
+ /users:
+ $ref: '#/components/pathItems/userPathItem'
+";
+
+ private readonly OpenApiPathItemReference _localPathItemReference;
+ private readonly OpenApiPathItemReference _externalPathItemReference;
+ private readonly OpenApiDocument _openApiDoc;
+ private readonly OpenApiDocument _openApiDoc_2;
+
+ public OpenApiPathItemReferenceTests()
+ {
+ var reader = new OpenApiStringReader();
+ _openApiDoc = reader.Read(OpenApi, out _);
+ _openApiDoc_2 = reader.Read(OpenApi_2, out _);
+ _openApiDoc_2.Workspace = new();
+ _openApiDoc_2.Workspace.AddDocument("http://localhost/pathitemreference", _openApiDoc);
+
+ _localPathItemReference = new OpenApiPathItemReference("userPathItem", _openApiDoc)
+ {
+ Description = "Local reference: User path item description",
+ Summary = "Local reference: User path item summary"
+ };
+
+ _externalPathItemReference = new OpenApiPathItemReference("userPathItem", _openApiDoc_2, "http://localhost/pathitemreference")
+ {
+ Description = "External reference: User path item description",
+ Summary = "External reference: User path item summary"
+ };
+ }
+
+ [Fact]
+ public void PathItemReferenceResolutionWorks()
+ {
+ // Assert
+ Assert.Equal(3, _localPathItemReference.Operations.Count);
+ Assert.Equal("Local reference: User path item description", _localPathItemReference.Description);
+ Assert.Equal("Local reference: User path item summary", _localPathItemReference.Summary);
+ Assert.Equal(new OperationType[] { OperationType.Get, OperationType.Post, OperationType.Delete },
+ _localPathItemReference.Operations.Select(o => o.Key));
+
+ Assert.Equal("External reference: User path item description", _externalPathItemReference.Description);
+ Assert.Equal("External reference: User path item summary", _externalPathItemReference.Summary);
+
+ // The main description and summary values shouldn't change
+ Assert.Equal("User path item description", _openApiDoc.Components.PathItems.First().Value.Description);
+ Assert.Equal("User path item summary", _openApiDoc.Components.PathItems.First().Value.Summary);
+ }
+
+ [Theory]
+ [InlineData(true)]
+ [InlineData(false)]
+ public async Task SerializePathItemReferenceAsV3JsonWorks(bool produceTerseOutput)
+ {
+ // Arrange
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput });
+
+ // Act
+ _localPathItemReference.SerializeAsV3(writer);
+ writer.Flush();
+
+ // Assert
+ await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
+ }
+
+ [Theory]
+ [InlineData(true)]
+ [InlineData(false)]
+ public async Task SerializePathItemReferenceAsV31JsonWorks(bool produceTerseOutput)
+ {
+ // Arrange
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput });
+
+ // Act
+ _localPathItemReference.SerializeAsV31(writer);
+ writer.Flush();
+
+ // Assert
+ await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
+ }
+
+ [Theory]
+ [InlineData(true)]
+ [InlineData(false)]
+ public async Task SerializePathItemReferenceAsV2JsonWorksAsync(bool produceTerseOutput)
+ {
+ // Arrange
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput });
+
+ // Act
+ _localPathItemReference.SerializeAsV2(writer);
+ writer.Flush();
+
+ // Assert
+ await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
+ }
+ }
+}
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.SerializeRequestBodyReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.SerializeRequestBodyReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..cdbbe00d1
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.SerializeRequestBodyReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,10 @@
+{
+ "description": "User creation request body",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UserSchema"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.SerializeRequestBodyReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.SerializeRequestBodyReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..e82312f67
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.SerializeRequestBodyReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"description":"User creation request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSchema"}}}}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.SerializeRequestBodyReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.SerializeRequestBodyReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..cdbbe00d1
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.SerializeRequestBodyReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,10 @@
+{
+ "description": "User creation request body",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UserSchema"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.SerializeRequestBodyReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.SerializeRequestBodyReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..e82312f67
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.SerializeRequestBodyReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"description":"User creation request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSchema"}}}}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.cs
new file mode 100644
index 000000000..f96345842
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.cs
@@ -0,0 +1,141 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license.
+
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi.Models.References;
+using Microsoft.OpenApi.Readers;
+using Microsoft.OpenApi.Writers;
+using VerifyXunit;
+using Xunit;
+
+namespace Microsoft.OpenApi.Tests.Models.References
+{
+ [Collection("DefaultSettings")]
+ [UsesVerify]
+ public class OpenApiRequestBodyReferenceTests
+ {
+ private const string OpenApi = @"
+openapi: 3.0.3
+info:
+ title: Sample API
+ version: 1.0.0
+
+paths:
+ /users:
+ post:
+ summary: Create a user
+ requestBody:
+ $ref: '#/components/requestBodies/UserRequest' # <---- referencing the requestBody here
+ responses:
+ '201':
+ description: User created
+
+components:
+ requestBodies:
+ UserRequest:
+ description: User creation request body
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UserSchema'
+
+ schemas:
+ UserSchema:
+ type: object
+ properties:
+ name:
+ type: string
+ email:
+ type: string
+";
+
+ private const string OpenApi_2 = @"
+openapi: 3.0.3
+info:
+ title: Sample API
+ version: 1.0.0
+
+paths:
+ /users:
+ post:
+ summary: Create a user
+ requestBody:
+ $ref: '#/components/requestBodies/UserRequest' # <---- referencing the requestBody here
+ responses:
+ '201':
+ description: User created
+";
+
+ private readonly OpenApiRequestBodyReference _localRequestBodyReference;
+ private readonly OpenApiRequestBodyReference _externalRequestBodyReference;
+ private readonly OpenApiDocument _openApiDoc;
+ private readonly OpenApiDocument _openApiDoc_2;
+
+ public OpenApiRequestBodyReferenceTests()
+ {
+ var reader = new OpenApiStringReader();
+ _openApiDoc = reader.Read(OpenApi, out _);
+ _openApiDoc_2 = reader.Read(OpenApi_2, out _);
+ _openApiDoc_2.Workspace = new();
+ _openApiDoc_2.Workspace.AddDocument("http://localhost/requestbodyreference", _openApiDoc);
+
+ _localRequestBodyReference = new("UserRequest", _openApiDoc)
+ {
+ Description = "User request body"
+ };
+
+ _externalRequestBodyReference = new("UserRequest", _openApiDoc_2, "http://localhost/requestbodyreference")
+ {
+ Description = "External Reference: User request body"
+ };
+ }
+
+ [Fact]
+ public void RequestBodyReferenceResolutionWorks()
+ {
+ // Assert
+ Assert.Equal("User request body", _localRequestBodyReference.Description);
+ Assert.Equal("application/json", _localRequestBodyReference.Content.First().Key);
+ Assert.Equal("External Reference: User request body", _externalRequestBodyReference.Description);
+ Assert.Equal("User creation request body", _openApiDoc.Components.RequestBodies.First().Value.Description);
+ }
+
+ [Theory]
+ [InlineData(true)]
+ [InlineData(false)]
+ public async Task SerializeRequestBodyReferenceAsV3JsonWorks(bool produceTerseOutput)
+ {
+ // Arrange
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput });
+
+ // Act
+ _localRequestBodyReference.SerializeAsV3(writer);
+ writer.Flush();
+
+ // Assert
+ await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
+ }
+
+ [Theory]
+ [InlineData(true)]
+ [InlineData(false)]
+ public async Task SerializeRequestBodyReferenceAsV31JsonWorks(bool produceTerseOutput)
+ {
+ // Arrange
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput });
+
+ // Act
+ _localRequestBodyReference.SerializeAsV31(writer);
+ writer.Flush();
+
+ // Assert
+ await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
+ }
+ }
+}
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiResponseReferenceTest.SerializeResponseReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiResponseReferenceTest.SerializeResponseReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..b7716dcb6
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiResponseReferenceTest.SerializeResponseReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,6 @@
+{
+ "description": "OK response",
+ "content": {
+ "text/plain": { }
+ }
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiResponseReferenceTest.SerializeResponseReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiResponseReferenceTest.SerializeResponseReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..037f74d31
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiResponseReferenceTest.SerializeResponseReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"description":"OK response","content":{"text/plain":{}}}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiResponseReferenceTest.SerializeResponseReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiResponseReferenceTest.SerializeResponseReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..b7716dcb6
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiResponseReferenceTest.SerializeResponseReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,6 @@
+{
+ "description": "OK response",
+ "content": {
+ "text/plain": { }
+ }
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiResponseReferenceTest.SerializeResponseReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiResponseReferenceTest.SerializeResponseReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..037f74d31
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiResponseReferenceTest.SerializeResponseReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"description":"OK response","content":{"text/plain":{}}}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiResponseReferenceTest.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiResponseReferenceTest.cs
new file mode 100644
index 000000000..f3a654a50
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiResponseReferenceTest.cs
@@ -0,0 +1,126 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license.
+
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi.Models.References;
+using Microsoft.OpenApi.Readers;
+using Microsoft.OpenApi.Writers;
+using VerifyXunit;
+using Xunit;
+
+namespace Microsoft.OpenApi.Tests.Models.References
+{
+ [Collection("DefaultSettings")]
+ [UsesVerify]
+ public class OpenApiResponseReferenceTest
+ {
+ private const string OpenApi = @"
+openapi: 3.0.3
+info:
+ title: Sample API
+ version: 1.0.0
+
+paths:
+ /ping:
+ get:
+ responses:
+ '200':
+ $ref: '#/components/responses/OkResponse'
+
+components:
+ responses:
+ OkResponse:
+ description: OK
+ content:
+ text/plain:
+ schema:
+ $ref: '#/components/schemas/Pong'
+";
+
+ private const string OpenApi_2 = @"
+openapi: 3.0.3
+info:
+ title: Sample API
+ version: 1.0.0
+
+paths:
+ /ping:
+ get:
+ responses:
+ '200':
+ $ref: '#/components/responses/OkResponse'
+";
+
+ private readonly OpenApiResponseReference _localResponseReference;
+ private readonly OpenApiResponseReference _externalResponseReference;
+ private readonly OpenApiDocument _openApiDoc;
+ private readonly OpenApiDocument _openApiDoc_2;
+
+ public OpenApiResponseReferenceTest()
+ {
+ var reader = new OpenApiStringReader();
+ _openApiDoc = reader.Read(OpenApi, out _);
+ _openApiDoc_2 = reader.Read(OpenApi_2, out _);
+ _openApiDoc_2.Workspace = new();
+ _openApiDoc_2.Workspace.AddDocument("http://localhost/responsereference", _openApiDoc);
+
+ _localResponseReference = new("OkResponse", _openApiDoc)
+ {
+ Description = "OK response"
+ };
+
+ _externalResponseReference = new("OkResponse", _openApiDoc_2, "http://localhost/responsereference")
+ {
+ Description = "External reference: OK response"
+ };
+ }
+
+ [Fact]
+ public void ResponseReferenceResolutionWorks()
+ {
+ // Assert
+ Assert.Equal("OK response", _localResponseReference.Description);
+ Assert.Equal("text/plain", _localResponseReference.Content.First().Key);
+ Assert.Equal("External reference: OK response", _externalResponseReference.Description);
+ Assert.Equal("OK", _openApiDoc.Components.Responses.First().Value.Description);
+ }
+
+ [Theory]
+ [InlineData(true)]
+ [InlineData(false)]
+ public async Task SerializeResponseReferenceAsV3JsonWorks(bool produceTerseOutput)
+ {
+ // Arrange
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput });
+
+ // Act
+ _localResponseReference.SerializeAsV3(writer);
+ writer.Flush();
+
+ // Assert
+ await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
+ }
+
+ [Theory]
+ [InlineData(true)]
+ [InlineData(false)]
+ public async Task SerializeResponseReferenceAsV31JsonWorks(bool produceTerseOutput)
+ {
+ // Arrange
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput });
+
+ // Act
+ _localResponseReference.SerializeAsV31(writer);
+ writer.Flush();
+
+ // Assert
+ await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
+ }
+ }
+}
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..073ce3d7b
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,5 @@
+{
+ "type": "apiKey",
+ "name": "X-API-Key",
+ "in": "header"
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..6d0080a96
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"type":"apiKey","name":"X-API-Key","in":"header"}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..073ce3d7b
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1,5 @@
+{
+ "type": "apiKey",
+ "name": "X-API-Key",
+ "in": "header"
+}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..6d0080a96
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.SerializeSecuritySchemeReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+{"type":"apiKey","name":"X-API-Key","in":"header"}
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.cs
new file mode 100644
index 000000000..a0bf9ea38
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiSecuritySchemeReferenceTests.cs
@@ -0,0 +1,92 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license.
+
+using System.Globalization;
+using System.IO;
+using System.Threading.Tasks;
+using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi.Models.References;
+using Microsoft.OpenApi.Readers;
+using Microsoft.OpenApi.Writers;
+using VerifyXunit;
+using Xunit;
+
+namespace Microsoft.OpenApi.Tests.Models.References
+{
+ [Collection("DefaultSettings")]
+ [UsesVerify]
+ public class OpenApiSecuritySchemeReferenceTests
+ {
+ private const string OpenApi = @"
+openapi: 3.0.3
+info:
+ title: Sample API
+ version: 1.0.0
+
+paths:
+ /users:
+ get:
+ summary: Retrieve users
+ security:
+ - mySecurityScheme: []
+
+components:
+ securitySchemes:
+ mySecurityScheme:
+ type: apiKey
+ name: X-API-Key
+ in: header
+";
+
+ readonly OpenApiSecuritySchemeReference _openApiSecuritySchemeReference;
+
+ public OpenApiSecuritySchemeReferenceTests()
+ {
+ var reader = new OpenApiStringReader();
+ OpenApiDocument openApiDoc = reader.Read(OpenApi, out _);
+ _openApiSecuritySchemeReference = new("mySecurityScheme", openApiDoc);
+ }
+
+ [Fact]
+ public void SecuritySchemeResolutionWorks()
+ {
+ // Assert
+ Assert.Equal("X-API-Key", _openApiSecuritySchemeReference.Name);
+ Assert.Equal(SecuritySchemeType.ApiKey, _openApiSecuritySchemeReference.Type);
+ }
+
+ [Theory]
+ [InlineData(true)]
+ [InlineData(false)]
+ public async Task SerializeSecuritySchemeReferenceAsV3JsonWorks(bool produceTerseOutput)
+ {
+ // Arrange
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput });
+
+ // Act
+ _openApiSecuritySchemeReference.SerializeAsV3(writer);
+ writer.Flush();
+
+ // Assert
+ await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
+ }
+
+ [Theory]
+ [InlineData(true)]
+ [InlineData(false)]
+ public async Task SerializeSecuritySchemeReferenceAsV31JsonWorks(bool produceTerseOutput)
+ {
+ // Arrange
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput });
+
+ // Act
+ _openApiSecuritySchemeReference.SerializeAsV31(writer);
+ writer.Flush();
+
+ // Assert
+ await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
+ }
+ }
+}
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.SerializeSecuritySchemeReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.SerializeSecuritySchemeReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..5f282702b
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.SerializeSecuritySchemeReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.SerializeSecuritySchemeReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.SerializeSecuritySchemeReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..5f282702b
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.SerializeSecuritySchemeReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.SerializeSecuritySchemeReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.SerializeSecuritySchemeReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..dd019c493
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.SerializeSecuritySchemeReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1 @@
+"user"
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.SerializeSecuritySchemeReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.SerializeSecuritySchemeReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..5f282702b
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.SerializeSecuritySchemeReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.SerializeTagReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.SerializeTagReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..dd019c493
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.SerializeTagReferenceAsV31JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1 @@
+"user"
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.SerializeTagReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.SerializeTagReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..dd019c493
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.SerializeTagReferenceAsV31JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+"user"
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.SerializeTagReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.SerializeTagReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
new file mode 100644
index 000000000..dd019c493
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.SerializeTagReferenceAsV3JsonWorks_produceTerseOutput=False.verified.txt
@@ -0,0 +1 @@
+"user"
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.SerializeTagReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.SerializeTagReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
new file mode 100644
index 000000000..dd019c493
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.SerializeTagReferenceAsV3JsonWorks_produceTerseOutput=True.verified.txt
@@ -0,0 +1 @@
+"user"
\ No newline at end of file
diff --git a/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.cs b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.cs
new file mode 100644
index 000000000..bff7b6b8c
--- /dev/null
+++ b/test/Microsoft.OpenApi.Tests/Models/References/OpenApiTagReferenceTest.cs
@@ -0,0 +1,115 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license.
+
+using System.Globalization;
+using System.IO;
+using System.Threading.Tasks;
+using Microsoft.OpenApi.Models;
+using Microsoft.OpenApi.Models.References;
+using Microsoft.OpenApi.Readers;
+using Microsoft.OpenApi.Writers;
+using VerifyXunit;
+using Xunit;
+
+namespace Microsoft.OpenApi.Tests.Models.References
+{
+ [Collection("DefaultSettings")]
+ [UsesVerify]
+ public class OpenApiTagReferenceTest
+ {
+ private const string OpenApi = @"openapi: 3.0.3
+info:
+ title: Sample API
+ version: 1.0.0
+
+paths:
+ /users/{userId}:
+ get:
+ summary: Returns a user by ID.
+ parameters:
+ - name: userId
+ in: path
+ required: true
+ description: The ID of the user to return.
+ schema:
+ type: integer
+ responses:
+ '200':
+ description: A user object.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/User'
+ '404':
+ description: The user was not found.
+ tags:
+ - $ref: '#/tags/user'
+components:
+ schemas:
+ User:
+ type: object
+ properties:
+ id:
+ type: integer
+ name:
+ type: string
+tags:
+ - name: user
+ description: Operations about users.
+";
+
+ readonly OpenApiTagReference _openApiTagReference;
+
+ public OpenApiTagReferenceTest()
+ {
+ var reader = new OpenApiStringReader();
+ OpenApiDocument openApiDoc = reader.Read(OpenApi, out _);
+ _openApiTagReference = new("user", openApiDoc)
+ {
+ Description = "Users operations"
+ };
+ }
+
+ [Fact]
+ public void TagReferenceResolutionWorks()
+ {
+ // Assert
+ Assert.Equal("user", _openApiTagReference.Name);
+ Assert.Equal("Users operations", _openApiTagReference.Description);
+ }
+
+ [Theory]
+ [InlineData(true)]
+ [InlineData(false)]
+ public async Task SerializeTagReferenceAsV3JsonWorks(bool produceTerseOutput)
+ {
+ // Arrange
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput });
+
+ // Act
+ _openApiTagReference.SerializeAsV3(writer);
+ writer.Flush();
+
+ // Assert
+ await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
+ }
+
+ [Theory]
+ [InlineData(true)]
+ [InlineData(false)]
+ public async Task SerializeTagReferenceAsV31JsonWorks(bool produceTerseOutput)
+ {
+ // Arrange
+ var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
+ var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput });
+
+ // Act
+ _openApiTagReference.SerializeAsV31(writer);
+ writer.Flush();
+
+ // Assert
+ await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
+ }
+ }
+}
diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
index c12a59de5..74d46a503 100755
--- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
+++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt
@@ -232,34 +232,34 @@ namespace Microsoft.OpenApi.Models
{
public OpenApiCallback() { }
public OpenApiCallback(Microsoft.OpenApi.Models.OpenApiCallback callback) { }
- public System.Collections.Generic.IDictionary Extensions { get; set; }
- public System.Collections.Generic.Dictionary PathItems { get; set; }
public Microsoft.OpenApi.Models.OpenApiReference Reference { get; set; }
- public bool UnresolvedReference { get; set; }
+ public virtual System.Collections.Generic.IDictionary Extensions { get; set; }
+ public virtual System.Collections.Generic.Dictionary PathItems { get; set; }
+ public virtual 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 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 virtual void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
}
public class OpenApiComponents : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable
{
public OpenApiComponents() { }
public OpenApiComponents(Microsoft.OpenApi.Models.OpenApiComponents components) { }
- public System.Collections.Generic.IDictionary Callbacks { get; set; }
- public System.Collections.Generic.IDictionary Examples { get; set; }
- public System.Collections.Generic.IDictionary Extensions { get; set; }
- public System.Collections.Generic.IDictionary Headers { get; set; }
- public System.Collections.Generic.IDictionary Links { get; set; }
- public System.Collections.Generic.IDictionary Parameters { get; set; }
- public System.Collections.Generic.IDictionary PathItems { get; set; }
- public System.Collections.Generic.IDictionary RequestBodies { get; set; }
- 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 virtual System.Collections.Generic.IDictionary Callbacks { get; set; }
+ public virtual System.Collections.Generic.IDictionary Examples { get; set; }
+ public virtual System.Collections.Generic.IDictionary Extensions { get; set; }
+ public virtual System.Collections.Generic.IDictionary Headers { get; set; }
+ public virtual System.Collections.Generic.IDictionary Links { get; set; }
+ public virtual System.Collections.Generic.IDictionary Parameters { get; set; }
+ public virtual System.Collections.Generic.IDictionary PathItems { get; set; }
+ public virtual System.Collections.Generic.IDictionary RequestBodies { get; set; }
+ public virtual System.Collections.Generic.IDictionary Responses { get; set; }
+ public virtual System.Collections.Generic.IDictionary Schemas { get; set; }
+ public virtual 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 SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
@@ -468,20 +468,20 @@ namespace Microsoft.OpenApi.Models
{
public OpenApiExample() { }
public OpenApiExample(Microsoft.OpenApi.Models.OpenApiExample example) { }
- public string Description { get; set; }
- public System.Collections.Generic.IDictionary Extensions { get; set; }
- public string ExternalValue { get; set; }
- public Microsoft.OpenApi.Models.OpenApiReference Reference { get; set; }
- public string Summary { get; set; }
- public bool UnresolvedReference { get; set; }
- public Microsoft.OpenApi.Any.OpenApiAny Value { get; set; }
+ public virtual string Description { get; set; }
+ public virtual System.Collections.Generic.IDictionary Extensions { get; set; }
+ public virtual string ExternalValue { get; set; }
+ public virtual Microsoft.OpenApi.Models.OpenApiReference Reference { get; set; }
+ public virtual string Summary { get; set; }
+ public virtual bool UnresolvedReference { get; set; }
+ public virtual Microsoft.OpenApi.Any.OpenApiAny Value { get; set; }
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 SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
- public void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
- public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual 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
where T : Microsoft.OpenApi.Interfaces.IOpenApiSerializable
@@ -508,27 +508,27 @@ namespace Microsoft.OpenApi.Models
{
public OpenApiHeader() { }
public OpenApiHeader(Microsoft.OpenApi.Models.OpenApiHeader header) { }
- public bool AllowEmptyValue { get; set; }
- public bool AllowReserved { get; set; }
- public System.Collections.Generic.IDictionary Content { get; set; }
- public bool Deprecated { get; set; }
- public string Description { get; set; }
- public Microsoft.OpenApi.Any.OpenApiAny Example { get; set; }
- public System.Collections.Generic.IDictionary Examples { get; set; }
- public bool Explode { get; set; }
- public System.Collections.Generic.IDictionary Extensions { get; set; }
public Microsoft.OpenApi.Models.OpenApiReference Reference { get; set; }
- public bool Required { get; set; }
- public Microsoft.OpenApi.Models.OpenApiSchema Schema { get; set; }
- public Microsoft.OpenApi.Models.ParameterStyle? Style { get; set; }
- public bool UnresolvedReference { get; set; }
+ public virtual bool AllowEmptyValue { get; set; }
+ public virtual bool AllowReserved { get; set; }
+ public virtual System.Collections.Generic.IDictionary Content { get; set; }
+ public virtual bool Deprecated { get; set; }
+ public virtual string Description { get; set; }
+ public virtual Microsoft.OpenApi.Any.OpenApiAny Example { get; set; }
+ public virtual System.Collections.Generic.IDictionary Examples { get; set; }
+ public virtual bool Explode { get; set; }
+ public virtual System.Collections.Generic.IDictionary Extensions { get; set; }
+ public virtual bool Required { get; set; }
+ public virtual Microsoft.OpenApi.Models.OpenApiSchema Schema { get; set; }
+ public virtual Microsoft.OpenApi.Models.ParameterStyle? Style { get; set; }
+ public virtual bool UnresolvedReference { get; set; }
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 SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
- public void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
- public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
}
public class OpenApiInfo : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable
{
@@ -562,22 +562,22 @@ namespace Microsoft.OpenApi.Models
{
public OpenApiLink() { }
public OpenApiLink(Microsoft.OpenApi.Models.OpenApiLink link) { }
- public string Description { get; set; }
- public System.Collections.Generic.IDictionary Extensions { get; set; }
- public string OperationId { get; set; }
- public string OperationRef { get; set; }
- public System.Collections.Generic.Dictionary Parameters { get; set; }
public Microsoft.OpenApi.Models.OpenApiReference Reference { get; set; }
- public Microsoft.OpenApi.Models.RuntimeExpressionAnyWrapper RequestBody { get; set; }
- public Microsoft.OpenApi.Models.OpenApiServer Server { get; set; }
- public bool UnresolvedReference { get; set; }
+ public virtual string Description { get; set; }
+ public virtual System.Collections.Generic.IDictionary Extensions { get; set; }
+ public virtual string OperationId { get; set; }
+ public virtual string OperationRef { get; set; }
+ public virtual System.Collections.Generic.Dictionary Parameters { get; set; }
+ public virtual Microsoft.OpenApi.Models.RuntimeExpressionAnyWrapper RequestBody { get; set; }
+ public virtual Microsoft.OpenApi.Models.OpenApiServer Server { get; set; }
+ public virtual bool UnresolvedReference { get; set; }
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 SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
- public void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
- public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
}
public class OpenApiMediaType : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable
{
@@ -644,50 +644,50 @@ namespace Microsoft.OpenApi.Models
{
public OpenApiParameter() { }
public OpenApiParameter(Microsoft.OpenApi.Models.OpenApiParameter parameter) { }
- public bool AllowEmptyValue { get; set; }
- public bool AllowReserved { get; set; }
- public System.Collections.Generic.IDictionary Content { get; set; }
- public bool Deprecated { get; set; }
- public string Description { get; set; }
- public Microsoft.OpenApi.Any.OpenApiAny Example { get; set; }
- public System.Collections.Generic.IDictionary Examples { get; set; }
- public bool Explode { get; set; }
- public System.Collections.Generic.IDictionary Extensions { get; set; }
- public Microsoft.OpenApi.Models.ParameterLocation? In { get; set; }
- public string Name { get; set; }
public Microsoft.OpenApi.Models.OpenApiReference Reference { get; set; }
- public bool Required { get; set; }
- public Microsoft.OpenApi.Models.OpenApiSchema Schema { get; set; }
- public Microsoft.OpenApi.Models.ParameterStyle? Style { get; set; }
- public bool UnresolvedReference { get; set; }
+ public virtual bool AllowEmptyValue { get; set; }
+ public virtual bool AllowReserved { get; set; }
+ public virtual System.Collections.Generic.IDictionary Content { get; set; }
+ public virtual bool Deprecated { get; set; }
+ public virtual string Description { get; set; }
+ public virtual Microsoft.OpenApi.Any.OpenApiAny Example { get; set; }
+ public virtual System.Collections.Generic.IDictionary Examples { get; set; }
+ public virtual bool Explode { get; set; }
+ public virtual System.Collections.Generic.IDictionary Extensions { get; set; }
+ public virtual Microsoft.OpenApi.Models.ParameterLocation? In { get; set; }
+ public virtual string Name { get; set; }
+ public virtual bool Required { get; set; }
+ public virtual Microsoft.OpenApi.Models.OpenApiSchema Schema { get; set; }
+ public virtual Microsoft.OpenApi.Models.ParameterStyle? Style { get; set; }
+ public virtual bool UnresolvedReference { get; set; }
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 SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
- public void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
- public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual 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
{
public OpenApiPathItem() { }
public OpenApiPathItem(Microsoft.OpenApi.Models.OpenApiPathItem pathItem) { }
- public string Description { get; set; }
- public System.Collections.Generic.IDictionary Extensions { get; set; }
- public System.Collections.Generic.IDictionary Operations { get; set; }
- public System.Collections.Generic.IList Parameters { get; set; }
public Microsoft.OpenApi.Models.OpenApiReference Reference { get; set; }
- public System.Collections.Generic.IList Servers { get; set; }
- public string Summary { get; set; }
public bool UnresolvedReference { get; set; }
+ public virtual string Description { get; set; }
+ public virtual System.Collections.Generic.IDictionary Extensions { get; set; }
+ public virtual System.Collections.Generic.IDictionary Operations { get; set; }
+ public virtual System.Collections.Generic.IList Parameters { get; set; }
+ public virtual System.Collections.Generic.IList Servers { get; set; }
+ public virtual string Summary { 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 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 virtual void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
}
public class OpenApiPaths : Microsoft.OpenApi.Models.OpenApiExtensibleDictionary
{
@@ -717,38 +717,38 @@ namespace Microsoft.OpenApi.Models
{
public OpenApiRequestBody() { }
public OpenApiRequestBody(Microsoft.OpenApi.Models.OpenApiRequestBody requestBody) { }
- public System.Collections.Generic.IDictionary Content { get; set; }
- public string Description { get; set; }
- public System.Collections.Generic.IDictionary Extensions { get; set; }
public Microsoft.OpenApi.Models.OpenApiReference Reference { get; set; }
- public bool Required { get; set; }
public bool UnresolvedReference { get; set; }
+ public virtual System.Collections.Generic.IDictionary Content { get; set; }
+ public virtual string Description { get; set; }
+ public virtual System.Collections.Generic.IDictionary Extensions { get; set; }
+ public virtual bool Required { get; set; }
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 SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
- public void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
- public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual 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
{
public OpenApiResponse() { }
public OpenApiResponse(Microsoft.OpenApi.Models.OpenApiResponse response) { }
- public System.Collections.Generic.IDictionary Content { get; set; }
- public string Description { get; set; }
- public System.Collections.Generic.IDictionary Extensions { get; set; }
- public System.Collections.Generic.IDictionary Headers { get; set; }
- public System.Collections.Generic.IDictionary Links { get; set; }
public Microsoft.OpenApi.Models.OpenApiReference Reference { get; set; }
public bool UnresolvedReference { get; set; }
+ public virtual System.Collections.Generic.IDictionary Content { get; set; }
+ public virtual string Description { get; set; }
+ public virtual System.Collections.Generic.IDictionary Extensions { get; set; }
+ public virtual System.Collections.Generic.IDictionary Headers { get; set; }
+ public virtual System.Collections.Generic.IDictionary Links { get; set; }
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 SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
- public void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
- public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
}
public class OpenApiResponses : Microsoft.OpenApi.Models.OpenApiExtensibleDictionary
{
@@ -817,23 +817,23 @@ namespace Microsoft.OpenApi.Models
{
public OpenApiSecurityScheme() { }
public OpenApiSecurityScheme(Microsoft.OpenApi.Models.OpenApiSecurityScheme securityScheme) { }
- public string BearerFormat { get; set; }
- public string Description { get; set; }
- public System.Collections.Generic.IDictionary Extensions { get; set; }
- public Microsoft.OpenApi.Models.OpenApiOAuthFlows Flows { get; set; }
- public Microsoft.OpenApi.Models.ParameterLocation In { get; set; }
- public string Name { get; set; }
- public System.Uri OpenIdConnectUrl { get; set; }
public Microsoft.OpenApi.Models.OpenApiReference Reference { get; set; }
- public string Scheme { get; set; }
- public Microsoft.OpenApi.Models.SecuritySchemeType Type { get; set; }
public bool UnresolvedReference { get; set; }
+ public virtual string BearerFormat { get; set; }
+ public virtual string Description { get; set; }
+ public virtual System.Collections.Generic.IDictionary Extensions { get; set; }
+ public virtual Microsoft.OpenApi.Models.OpenApiOAuthFlows Flows { get; set; }
+ public virtual Microsoft.OpenApi.Models.ParameterLocation In { get; set; }
+ public virtual string Name { get; set; }
+ public virtual System.Uri OpenIdConnectUrl { get; set; }
+ public virtual string Scheme { get; set; }
+ public virtual Microsoft.OpenApi.Models.SecuritySchemeType Type { 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 SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
- public void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
- public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
}
public class OpenApiServer : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable
{
@@ -863,18 +863,18 @@ namespace Microsoft.OpenApi.Models
{
public OpenApiTag() { }
public OpenApiTag(Microsoft.OpenApi.Models.OpenApiTag tag) { }
- public string Description { get; set; }
- public System.Collections.Generic.IDictionary Extensions { get; set; }
- public Microsoft.OpenApi.Models.OpenApiExternalDocs ExternalDocs { get; set; }
- public string Name { get; set; }
public Microsoft.OpenApi.Models.OpenApiReference Reference { get; set; }
public bool UnresolvedReference { get; set; }
+ public virtual string Description { get; set; }
+ public virtual System.Collections.Generic.IDictionary Extensions { get; set; }
+ public virtual Microsoft.OpenApi.Models.OpenApiExternalDocs ExternalDocs { get; set; }
+ public virtual string Name { 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 SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
- public void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
- public void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public virtual void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
}
public class OpenApiXml : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable
{
@@ -982,6 +982,19 @@ namespace Microsoft.OpenApi.Models
OpenIdConnect = 3,
}
}
+namespace Microsoft.OpenApi.Models.References
+{
+ public class OpenApiCallbackReference : Microsoft.OpenApi.Models.OpenApiCallback
+ {
+ public OpenApiCallbackReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { }
+ public override System.Collections.Generic.IDictionary Extensions { get; set; }
+ public override System.Collections.Generic.Dictionary PathItems { get; set; }
+ public override void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public override void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public override void SerializeAsV31WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ public override void SerializeAsV3WithoutReference(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
+ }
+}
namespace Microsoft.OpenApi.Services
{
public class CurrentKeys