Skip to content

Commit 4ea87ef

Browse files
committed
fix: shallow copy for callback
Signed-off-by: Vincent Biret <[email protected]>
1 parent d87375d commit 4ea87ef

File tree

5 files changed

+22
-16
lines changed

5 files changed

+22
-16
lines changed

src/Microsoft.OpenApi/Models/Interfaces/IOpenApiCallback.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace Microsoft.OpenApi.Models.Interfaces;
99
/// Defines the base properties for the callback object.
1010
/// This interface is provided for type assertions but should not be implemented by package consumers beyond automatic mocking.
1111
/// </summary>
12-
public interface IOpenApiCallback : IOpenApiSerializable, IOpenApiReadOnlyExtensible
12+
public interface IOpenApiCallback : IOpenApiSerializable, IOpenApiReadOnlyExtensible, IShallowCopyable<IOpenApiCallback>
1313
{
1414
/// <summary>
1515
/// A Path Item Object used to define a callback request and expected responses.

src/Microsoft.OpenApi/Models/OpenApiCallback.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public OpenApiCallback() { }
3333
/// <summary>
3434
/// Initializes a copy of an <see cref="OpenApiCallback"/> object
3535
/// </summary>
36-
public OpenApiCallback(IOpenApiCallback callback)
36+
internal OpenApiCallback(IOpenApiCallback callback)
3737
{
3838
PathItems = callback?.PathItems != null ? new(callback?.PathItems) : null;
3939
Extensions = callback?.Extensions != null ? new Dictionary<string, IOpenApiExtension>(callback.Extensions) : null;
@@ -98,5 +98,11 @@ public void SerializeAsV2(IOpenApiWriter writer)
9898
{
9999
// Callback object does not exist in V2.
100100
}
101+
102+
/// <inheritdoc/>
103+
public IOpenApiCallback CreateShallowCopy()
104+
{
105+
return new OpenApiCallback(this);
106+
}
101107
}
102108
}

src/Microsoft.OpenApi/Models/References/OpenApiCallbackReference.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,6 @@ public OpenApiCallbackReference(string referenceId, OpenApiDocument hostDocument
2929
{
3030
}
3131

32-
/// <summary>
33-
/// Copy constructor
34-
/// </summary>
35-
/// <param name="callback">The callback reference to copy</param>
36-
public OpenApiCallbackReference(OpenApiCallbackReference callback):base(callback)
37-
{
38-
}
39-
4032
internal OpenApiCallbackReference(OpenApiCallback target, string referenceId):base(target, referenceId, ReferenceType.Callback)
4133
{
4234
}
@@ -59,5 +51,13 @@ public override void SerializeAsV2(IOpenApiWriter writer)
5951
// examples components are not supported in OAS 2.0
6052
Reference.SerializeAsV2(writer);
6153
}
54+
55+
/// <inheritdoc/>
56+
public IOpenApiCallback CreateShallowCopy()
57+
{
58+
return _target is null ?
59+
new OpenApiCallbackReference(Reference.Id, Reference.HostDocument, Reference.ExternalResource) :
60+
new OpenApiCallbackReference(_target, Reference.Id);
61+
}
6262
}
6363
}

src/Microsoft.OpenApi/Models/References/OpenApiSchemaReference.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ public override IOpenApiSchema CopyReferenceAsTargetElementWithOverrides(IOpenAp
197197
public IOpenApiSchema CreateShallowCopy()
198198
{
199199
return _target is null ?
200-
new OpenApiSchemaReference(Reference.Id, Reference?.HostDocument, Reference?.ExternalResource) :
200+
new OpenApiSchemaReference(Reference.Id, Reference.HostDocument, Reference.ExternalResource) :
201201
new OpenApiSchemaReference(_target, Reference.Id);
202202
}
203203
}

test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,7 @@ namespace Microsoft.OpenApi.MicrosoftExtensions
337337
}
338338
namespace Microsoft.OpenApi.Models.Interfaces
339339
{
340-
public interface IOpenApiCallback : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable
340+
public interface IOpenApiCallback : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable, Microsoft.OpenApi.Interfaces.IShallowCopyable<Microsoft.OpenApi.Models.Interfaces.IOpenApiCallback>
341341
{
342342
System.Collections.Generic.Dictionary<Microsoft.OpenApi.Expressions.RuntimeExpression, Microsoft.OpenApi.Models.Interfaces.IOpenApiPathItem> PathItems { get; }
343343
}
@@ -496,13 +496,13 @@ namespace Microsoft.OpenApi.Models
496496
Object = 32,
497497
Array = 64,
498498
}
499-
public class OpenApiCallback : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable, Microsoft.OpenApi.Models.Interfaces.IOpenApiCallback
499+
public class OpenApiCallback : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable, Microsoft.OpenApi.Interfaces.IShallowCopyable<Microsoft.OpenApi.Models.Interfaces.IOpenApiCallback>, Microsoft.OpenApi.Models.Interfaces.IOpenApiCallback
500500
{
501501
public OpenApiCallback() { }
502-
public OpenApiCallback(Microsoft.OpenApi.Models.Interfaces.IOpenApiCallback callback) { }
503502
public System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.Interfaces.IOpenApiExtension> Extensions { get; set; }
504503
public System.Collections.Generic.Dictionary<Microsoft.OpenApi.Expressions.RuntimeExpression, Microsoft.OpenApi.Models.Interfaces.IOpenApiPathItem> PathItems { get; set; }
505504
public void AddPathItem(Microsoft.OpenApi.Expressions.RuntimeExpression expression, Microsoft.OpenApi.Models.Interfaces.IOpenApiPathItem pathItem) { }
505+
public Microsoft.OpenApi.Models.Interfaces.IOpenApiCallback CreateShallowCopy() { }
506506
public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
507507
public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
508508
public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
@@ -1253,13 +1253,13 @@ namespace Microsoft.OpenApi.Models.References
12531253
public virtual void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
12541254
public virtual void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
12551255
}
1256-
public class OpenApiCallbackReference : Microsoft.OpenApi.Models.References.BaseOpenApiReferenceHolder<Microsoft.OpenApi.Models.OpenApiCallback, Microsoft.OpenApi.Models.Interfaces.IOpenApiCallback>, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable, Microsoft.OpenApi.Models.Interfaces.IOpenApiCallback
1256+
public class OpenApiCallbackReference : Microsoft.OpenApi.Models.References.BaseOpenApiReferenceHolder<Microsoft.OpenApi.Models.OpenApiCallback, Microsoft.OpenApi.Models.Interfaces.IOpenApiCallback>, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable, Microsoft.OpenApi.Interfaces.IShallowCopyable<Microsoft.OpenApi.Models.Interfaces.IOpenApiCallback>, Microsoft.OpenApi.Models.Interfaces.IOpenApiCallback
12571257
{
1258-
public OpenApiCallbackReference(Microsoft.OpenApi.Models.References.OpenApiCallbackReference callback) { }
12591258
public OpenApiCallbackReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { }
12601259
public System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.Interfaces.IOpenApiExtension> Extensions { get; }
12611260
public System.Collections.Generic.Dictionary<Microsoft.OpenApi.Expressions.RuntimeExpression, Microsoft.OpenApi.Models.Interfaces.IOpenApiPathItem> PathItems { get; }
12621261
public override Microsoft.OpenApi.Models.Interfaces.IOpenApiCallback CopyReferenceAsTargetElementWithOverrides(Microsoft.OpenApi.Models.Interfaces.IOpenApiCallback source) { }
1262+
public Microsoft.OpenApi.Models.Interfaces.IOpenApiCallback CreateShallowCopy() { }
12631263
public override void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
12641264
}
12651265
public class OpenApiExampleReference : Microsoft.OpenApi.Models.References.BaseOpenApiReferenceHolder<Microsoft.OpenApi.Models.OpenApiExample, Microsoft.OpenApi.Models.Interfaces.IOpenApiExample>, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable, Microsoft.OpenApi.Models.Interfaces.IOpenApiDescribedElement, Microsoft.OpenApi.Models.Interfaces.IOpenApiExample, Microsoft.OpenApi.Models.Interfaces.IOpenApiSummarizedElement

0 commit comments

Comments
 (0)