Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
f55b018
Add reference classes
irvinesunday Jun 7, 2023
a458d70
Add serialization methods to reference classes
irvinesunday Jun 9, 2023
9b6e0ac
Modify access modifiers
irvinesunday Jun 9, 2023
ddc640c
Add header reference class
irvinesunday Jun 9, 2023
ef6f270
Use Target property instead of this
irvinesunday Jun 13, 2023
124bd44
Make Reference property readonly; add constructors to get reference v…
irvinesunday Jun 15, 2023
d57f07c
Add new constructor
irvinesunday Jun 22, 2023
eae34a7
Add reference tests
irvinesunday Jun 22, 2023
82ec1fd
Add Tag reference tests
irvinesunday Jun 22, 2023
d66fbf7
Update tests, method signatures and properties
irvinesunday Jun 27, 2023
0fea87f
Revert access modifiers
irvinesunday Jun 30, 2023
3608bf6
Update methods
irvinesunday Jun 30, 2023
0bfe56a
Update tests
irvinesunday Jun 30, 2023
acfc24a
Update tests
irvinesunday Jul 3, 2023
f36d284
Add externalResource parameter to constructors
irvinesunday Jul 7, 2023
ef22699
Add tests for external reference resolution
irvinesunday Jul 7, 2023
9397f17
Add description field
irvinesunday Jul 10, 2023
e5abd85
Update teg reference serializer and tests
irvinesunday Jul 10, 2023
571e5eb
Update PublicApi
irvinesunday Jul 10, 2023
279f4aa
Merge remote-tracking branch 'origin/release/2.0.0' into is/proxy-obj…
irvinesunday Jul 10, 2023
e04d37f
Fix broken tests
irvinesunday Jul 10, 2023
3fbaca0
Add guard clause for potentially null Target value
irvinesunday Jul 12, 2023
d25772f
Check for null or empty for strings
irvinesunday Jul 18, 2023
18f3e96
Use local field for getter and setter
irvinesunday Jul 18, 2023
16f2553
Additional check for null or empty for string properties
irvinesunday Jul 18, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@

using System;
using System.Collections.Generic;
using System.Text.Json.Nodes;
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Models;

Expand Down
26 changes: 13 additions & 13 deletions src/Microsoft.OpenApi/Models/OpenApiCallback.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand All @@ -19,13 +18,13 @@ public class OpenApiCallback : IOpenApiSerializable, IOpenApiReferenceable, IOpe
/// <summary>
/// A Path Item Object used to define a callback request and expected responses.
/// </summary>
public Dictionary<RuntimeExpression, OpenApiPathItem> PathItems { get; set; }
public virtual Dictionary<RuntimeExpression, OpenApiPathItem> PathItems { get; set; }
= new Dictionary<RuntimeExpression, OpenApiPathItem>();

/// <summary>
/// Indicates if object is populated with data or is just a reference to the data
/// </summary>
public bool UnresolvedReference { get; set; }
public virtual bool UnresolvedReference { get; set; }

/// <summary>
/// Reference pointer.
Expand All @@ -35,7 +34,7 @@ public class OpenApiCallback : IOpenApiSerializable, IOpenApiReferenceable, IOpe
/// <summary>
/// This object MAY be extended with Specification Extensions.
/// </summary>
public IDictionary<string, IOpenApiExtension> Extensions { get; set; } = new Dictionary<string, IOpenApiExtension>();
public virtual IDictionary<string, IOpenApiExtension> Extensions { get; set; } = new Dictionary<string, IOpenApiExtension>();

/// <summary>
/// Parameter-less constructor
Expand Down Expand Up @@ -83,7 +82,7 @@ public void AddPathItem(RuntimeExpression expression, OpenApiPathItem pathItem)
/// </summary>
/// <param name="writer"></param>
/// <exception cref="System.NotImplementedException"></exception>
public void SerializeAsV31(IOpenApiWriter writer)
public virtual void SerializeAsV31(IOpenApiWriter writer)
{
SerializeInternal(writer, (writer, element) => element.SerializeAsV31(writer),
(writer, referenceElement) => referenceElement.SerializeAsV31WithoutReference(writer));
Expand All @@ -92,7 +91,7 @@ public void SerializeAsV31(IOpenApiWriter writer)
/// <summary>
/// Serialize <see cref="OpenApiCallback"/> to Open Api v3.0
/// </summary>
public void SerializeAsV3(IOpenApiWriter writer)
public virtual void SerializeAsV3(IOpenApiWriter writer)
{
SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer),
(writer, referenceElement) => referenceElement.SerializeAsV3WithoutReference(writer));
Expand All @@ -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))
Expand All @@ -124,6 +123,7 @@ private void SerializeInternal(IOpenApiWriter writer,
target = GetEffective(Reference.HostDocument);
}
}

action(writer, target);
}

Expand All @@ -134,9 +134,9 @@ private void SerializeInternal(IOpenApiWriter writer,
/// <returns>OpenApiCallback</returns>
public OpenApiCallback GetEffective(OpenApiDocument doc)
{
if (this.Reference != null)
if (Reference != null)
{
return doc.ResolveReferenceTo<OpenApiCallback>(this.Reference);
return doc.ResolveReferenceTo<OpenApiCallback>(Reference);
}
else
{
Expand All @@ -147,7 +147,7 @@ public OpenApiCallback GetEffective(OpenApiDocument doc)
/// <summary>
/// Serialize to OpenAPI V31 document without using reference.
/// </summary>
public void SerializeAsV31WithoutReference(IOpenApiWriter writer)
public virtual void SerializeAsV31WithoutReference(IOpenApiWriter writer)
{
SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1,
(writer, element) => element.SerializeAsV31(writer));
Expand All @@ -156,13 +156,13 @@ public void SerializeAsV31WithoutReference(IOpenApiWriter writer)
/// <summary>
/// Serialize to OpenAPI V3 document without using reference.
/// </summary>
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<IOpenApiWriter, IOpenApiSerializable> callback)
{
writer.WriteStartObject();
Expand Down
22 changes: 11 additions & 11 deletions src/Microsoft.OpenApi/Models/OpenApiComponents.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,60 +16,60 @@ public class OpenApiComponents : IOpenApiSerializable, IOpenApiExtensible
/// <summary>
/// An object to hold reusable <see cref="OpenApiSchema"/> Objects.
/// </summary>
public IDictionary<string, OpenApiSchema> Schemas { get; set; } = new Dictionary<string, OpenApiSchema>();
public virtual IDictionary<string, OpenApiSchema> Schemas { get; set; } = new Dictionary<string, OpenApiSchema>();

/// <summary>
/// An object to hold reusable <see cref="OpenApiResponse"/> Objects.
/// </summary>
public IDictionary<string, OpenApiResponse> Responses { get; set; } = new Dictionary<string, OpenApiResponse>();
public virtual IDictionary<string, OpenApiResponse> Responses { get; set; } = new Dictionary<string, OpenApiResponse>();

/// <summary>
/// An object to hold reusable <see cref="OpenApiParameter"/> Objects.
/// </summary>
public IDictionary<string, OpenApiParameter> Parameters { get; set; } =
public virtual IDictionary<string, OpenApiParameter> Parameters { get; set; } =
new Dictionary<string, OpenApiParameter>();

/// <summary>
/// An object to hold reusable <see cref="OpenApiExample"/> Objects.
/// </summary>
public IDictionary<string, OpenApiExample> Examples { get; set; } = new Dictionary<string, OpenApiExample>();
public virtual IDictionary<string, OpenApiExample> Examples { get; set; } = new Dictionary<string, OpenApiExample>();

/// <summary>
/// An object to hold reusable <see cref="OpenApiRequestBody"/> Objects.
/// </summary>
public IDictionary<string, OpenApiRequestBody> RequestBodies { get; set; } =
public virtual IDictionary<string, OpenApiRequestBody> RequestBodies { get; set; } =
new Dictionary<string, OpenApiRequestBody>();

/// <summary>
/// An object to hold reusable <see cref="OpenApiHeader"/> Objects.
/// </summary>
public IDictionary<string, OpenApiHeader> Headers { get; set; } = new Dictionary<string, OpenApiHeader>();
public virtual IDictionary<string, OpenApiHeader> Headers { get; set; } = new Dictionary<string, OpenApiHeader>();

/// <summary>
/// An object to hold reusable <see cref="OpenApiSecurityScheme"/> Objects.
/// </summary>
public IDictionary<string, OpenApiSecurityScheme> SecuritySchemes { get; set; } =
public virtual IDictionary<string, OpenApiSecurityScheme> SecuritySchemes { get; set; } =
new Dictionary<string, OpenApiSecurityScheme>();

/// <summary>
/// An object to hold reusable <see cref="OpenApiLink"/> Objects.
/// </summary>
public IDictionary<string, OpenApiLink> Links { get; set; } = new Dictionary<string, OpenApiLink>();
public virtual IDictionary<string, OpenApiLink> Links { get; set; } = new Dictionary<string, OpenApiLink>();

/// <summary>
/// An object to hold reusable <see cref="OpenApiCallback"/> Objects.
/// </summary>
public IDictionary<string, OpenApiCallback> Callbacks { get; set; } = new Dictionary<string, OpenApiCallback>();
public virtual IDictionary<string, OpenApiCallback> Callbacks { get; set; } = new Dictionary<string, OpenApiCallback>();

/// <summary>
/// An object to hold reusable <see cref="OpenApiPathItem"/> Object.
/// </summary>
public IDictionary<string, OpenApiPathItem> PathItems { get; set; } = new Dictionary<string, OpenApiPathItem>();
public virtual IDictionary<string, OpenApiPathItem> PathItems { get; set; } = new Dictionary<string, OpenApiPathItem>();

/// <summary>
/// This object MAY be extended with Specification Extensions.
/// </summary>
public IDictionary<string, IOpenApiExtension> Extensions { get; set; } = new Dictionary<string, IOpenApiExtension>();
public virtual IDictionary<string, IOpenApiExtension> Extensions { get; set; } = new Dictionary<string, IOpenApiExtension>();

/// <summary>
/// Parameter-less constructor
Expand Down
2 changes: 1 addition & 1 deletion src/Microsoft.OpenApi/Models/OpenApiContact.cs
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
1 change: 0 additions & 1 deletion src/Microsoft.OpenApi/Models/OpenApiDocument.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand Down
28 changes: 14 additions & 14 deletions src/Microsoft.OpenApi/Models/OpenApiExample.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,43 +18,43 @@ public class OpenApiExample : IOpenApiSerializable, IOpenApiReferenceable, IOpen
/// <summary>
/// Short description for the example.
/// </summary>
public string Summary { get; set; }
public virtual string Summary { get; set; }

/// <summary>
/// Long description for the example.
/// CommonMark syntax MAY be used for rich text representation.
/// </summary>
public string Description { get; set; }
public virtual string Description { get; set; }

/// <summary>
/// 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.
/// </summary>
public OpenApiAny Value { get; set; }
public virtual OpenApiAny Value { get; set; }

/// <summary>
/// A URL that points to the literal example.
/// This provides the capability to reference examples that cannot easily be
/// included in JSON or YAML documents.
/// The value field and externalValue field are mutually exclusive.
/// </summary>
public string ExternalValue { get; set; }
public virtual string ExternalValue { get; set; }

/// <summary>
/// This object MAY be extended with Specification Extensions.
/// </summary>
public IDictionary<string, IOpenApiExtension> Extensions { get; set; } = new Dictionary<string, IOpenApiExtension>();
public virtual IDictionary<string, IOpenApiExtension> Extensions { get; set; } = new Dictionary<string, IOpenApiExtension>();

/// <summary>
/// Reference object.
/// </summary>
public OpenApiReference Reference { get; set; }
public virtual OpenApiReference Reference { get; set; }

/// <summary>
/// Indicates object is a placeholder reference to an actual object and does not contain valid data.
/// </summary>
public bool UnresolvedReference { get; set; } = false;
public virtual bool UnresolvedReference { get; set; } = false;

/// <summary>
/// Parameter-less constructor
Expand All @@ -79,7 +79,7 @@ public OpenApiExample(OpenApiExample example)
/// Serialize <see cref="OpenApiExample"/> to Open Api v3.1
/// </summary>
/// <param name="writer"></param>
public void SerializeAsV31(IOpenApiWriter writer)
public virtual void SerializeAsV31(IOpenApiWriter writer)
{
SerializeInternal(writer, (writer, element) => element.SerializeAsV31(writer),
(writer, element) => element.SerializeAsV31WithoutReference(writer));
Expand All @@ -89,13 +89,13 @@ public void SerializeAsV31(IOpenApiWriter writer)
/// Serialize <see cref="OpenApiExample"/> to Open Api v3.0
/// </summary>
/// <param name="writer"></param>
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<IOpenApiWriter, IOpenApiSerializable> callback,
internal virtual void SerializeInternal(IOpenApiWriter writer, Action<IOpenApiWriter, IOpenApiSerializable> callback,
Action<IOpenApiWriter, IOpenApiReferenceable> action)
{
writer = writer ?? throw Error.ArgumentNull(nameof(writer));
Expand Down Expand Up @@ -124,7 +124,7 @@ private void SerializeInternal(IOpenApiWriter writer, Action<IOpenApiWriter, IOp
/// <returns>OpenApiExample</returns>
public OpenApiExample GetEffective(OpenApiDocument doc)
{
if (this.Reference != null)
if (Reference != null)
{
return doc.ResolveReferenceTo<OpenApiExample>(this.Reference);
}
Expand All @@ -137,20 +137,20 @@ public OpenApiExample GetEffective(OpenApiDocument doc)
/// <summary>
/// Serialize to OpenAPI V31 example without using reference.
/// </summary>
public void SerializeAsV31WithoutReference(IOpenApiWriter writer)
public virtual void SerializeAsV31WithoutReference(IOpenApiWriter writer)
{
SerializeInternalWithoutReference(writer, OpenApiSpecVersion.OpenApi3_1);
}

/// <summary>
/// Serialize to OpenAPI V3 example without using reference.
/// </summary>
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();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand Down
2 changes: 1 addition & 1 deletion src/Microsoft.OpenApi/Models/OpenApiExternalDocs.cs
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Loading