Skip to content

Commit 2a42c36

Browse files
committed
fix: switches header to shallow copy
Signed-off-by: Vincent Biret <[email protected]>
1 parent ce93aa7 commit 2a42c36

File tree

4 files changed

+25
-16
lines changed

4 files changed

+25
-16
lines changed

src/Microsoft.OpenApi/Models/Interfaces/IOpenApiHeader.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 headers 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 IOpenApiHeader : IOpenApiDescribedElement, IOpenApiSerializable, IOpenApiReadOnlyExtensible
12+
public interface IOpenApiHeader : IOpenApiDescribedElement, IOpenApiSerializable, IOpenApiReadOnlyExtensible, IShallowCopyable<IOpenApiHeader>
1313
{
1414
/// <summary>
1515
/// Determines whether this header is mandatory.

src/Microsoft.OpenApi/Models/OpenApiHeader.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public OpenApiHeader() { }
6363
/// <summary>
6464
/// Initializes a copy of an <see cref="OpenApiHeader"/> object
6565
/// </summary>
66-
public OpenApiHeader(IOpenApiHeader header)
66+
internal OpenApiHeader(IOpenApiHeader header)
6767
{
6868
Description = header?.Description ?? Description;
6969
Required = header?.Required ?? Required;
@@ -187,5 +187,11 @@ public void SerializeAsV2(IOpenApiWriter writer)
187187

188188
writer.WriteEndObject();
189189
}
190+
191+
/// <inheritdoc/>
192+
public IOpenApiHeader CreateShallowCopy()
193+
{
194+
return new OpenApiHeader(this);
195+
}
190196
}
191197
}

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
using System.Text.Json.Nodes;
77
using Microsoft.OpenApi.Interfaces;
88
using Microsoft.OpenApi.Models.Interfaces;
9-
using Microsoft.OpenApi.Writers;
109

1110
namespace Microsoft.OpenApi.Models.References
1211
{
@@ -33,7 +32,7 @@ public OpenApiHeaderReference(string referenceId, OpenApiDocument hostDocument,
3332
/// Copy constructor
3433
/// </summary>
3534
/// <param name="header">The <see cref="OpenApiHeaderReference"/> object to copy</param>
36-
public OpenApiHeaderReference(OpenApiHeaderReference header):base(header)
35+
private OpenApiHeaderReference(OpenApiHeaderReference header):base(header)
3736
{
3837
}
3938

@@ -92,5 +91,11 @@ public override IOpenApiHeader CopyReferenceAsTargetElementWithOverrides(IOpenAp
9291
{
9392
return source is OpenApiHeader ? new OpenApiHeader(this) : source;
9493
}
94+
95+
/// <inheritdoc/>
96+
public IOpenApiHeader CreateShallowCopy()
97+
{
98+
return new OpenApiHeaderReference(this);
99+
}
95100
}
96101
}

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

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -345,12 +345,12 @@ namespace Microsoft.OpenApi.Models.Interfaces
345345
{
346346
string Description { get; set; }
347347
}
348-
public interface IOpenApiExample : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable, Microsoft.OpenApi.Models.Interfaces.IOpenApiDescribedElement, Microsoft.OpenApi.Models.Interfaces.IOpenApiSummarizedElement
348+
public interface IOpenApiExample : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable, Microsoft.OpenApi.Interfaces.IShallowCopyable<Microsoft.OpenApi.Models.Interfaces.IOpenApiExample>, Microsoft.OpenApi.Models.Interfaces.IOpenApiDescribedElement, Microsoft.OpenApi.Models.Interfaces.IOpenApiSummarizedElement
349349
{
350350
string ExternalValue { get; }
351351
System.Text.Json.Nodes.JsonNode Value { get; }
352352
}
353-
public interface IOpenApiHeader : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable, Microsoft.OpenApi.Models.Interfaces.IOpenApiDescribedElement
353+
public interface IOpenApiHeader : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable, Microsoft.OpenApi.Interfaces.IShallowCopyable<Microsoft.OpenApi.Models.Interfaces.IOpenApiHeader>, Microsoft.OpenApi.Models.Interfaces.IOpenApiDescribedElement
354354
{
355355
bool AllowEmptyValue { get; }
356356
bool AllowReserved { get; }
@@ -757,15 +757,15 @@ namespace Microsoft.OpenApi.Models
757757
public string Pointer { get; set; }
758758
public override string ToString() { }
759759
}
760-
public class OpenApiExample : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable, Microsoft.OpenApi.Models.Interfaces.IOpenApiDescribedElement, Microsoft.OpenApi.Models.Interfaces.IOpenApiExample, Microsoft.OpenApi.Models.Interfaces.IOpenApiSummarizedElement
760+
public class OpenApiExample : 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.IOpenApiExample>, Microsoft.OpenApi.Models.Interfaces.IOpenApiDescribedElement, Microsoft.OpenApi.Models.Interfaces.IOpenApiExample, Microsoft.OpenApi.Models.Interfaces.IOpenApiSummarizedElement
761761
{
762762
public OpenApiExample() { }
763-
public OpenApiExample(Microsoft.OpenApi.Models.Interfaces.IOpenApiExample example) { }
764763
public string Description { get; set; }
765764
public System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.Interfaces.IOpenApiExtension> Extensions { get; set; }
766765
public string ExternalValue { get; set; }
767766
public string Summary { get; set; }
768767
public System.Text.Json.Nodes.JsonNode Value { get; set; }
768+
public Microsoft.OpenApi.Models.Interfaces.IOpenApiExample CreateShallowCopy() { }
769769
public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
770770
public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
771771
public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
@@ -791,10 +791,9 @@ namespace Microsoft.OpenApi.Models
791791
public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
792792
public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
793793
}
794-
public class OpenApiHeader : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable, Microsoft.OpenApi.Models.Interfaces.IOpenApiDescribedElement, Microsoft.OpenApi.Models.Interfaces.IOpenApiHeader
794+
public class OpenApiHeader : 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.IOpenApiHeader>, Microsoft.OpenApi.Models.Interfaces.IOpenApiDescribedElement, Microsoft.OpenApi.Models.Interfaces.IOpenApiHeader
795795
{
796796
public OpenApiHeader() { }
797-
public OpenApiHeader(Microsoft.OpenApi.Models.Interfaces.IOpenApiHeader header) { }
798797
public bool AllowEmptyValue { get; set; }
799798
public bool AllowReserved { get; set; }
800799
public System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.Models.OpenApiMediaType> Content { get; set; }
@@ -807,6 +806,7 @@ namespace Microsoft.OpenApi.Models
807806
public bool Required { get; set; }
808807
public Microsoft.OpenApi.Models.Interfaces.IOpenApiSchema Schema { get; set; }
809808
public Microsoft.OpenApi.Models.ParameterStyle? Style { get; set; }
809+
public Microsoft.OpenApi.Models.Interfaces.IOpenApiHeader CreateShallowCopy() { }
810810
public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
811811
public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
812812
public void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
@@ -1262,21 +1262,20 @@ namespace Microsoft.OpenApi.Models.References
12621262
public Microsoft.OpenApi.Models.Interfaces.IOpenApiCallback CreateShallowCopy() { }
12631263
public override void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
12641264
}
1265-
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
1265+
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.Interfaces.IShallowCopyable<Microsoft.OpenApi.Models.Interfaces.IOpenApiExample>, Microsoft.OpenApi.Models.Interfaces.IOpenApiDescribedElement, Microsoft.OpenApi.Models.Interfaces.IOpenApiExample, Microsoft.OpenApi.Models.Interfaces.IOpenApiSummarizedElement
12661266
{
1267-
public OpenApiExampleReference(Microsoft.OpenApi.Models.References.OpenApiExampleReference example) { }
12681267
public OpenApiExampleReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { }
12691268
public string Description { get; set; }
12701269
public System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.Interfaces.IOpenApiExtension> Extensions { get; }
12711270
public string ExternalValue { get; }
12721271
public string Summary { get; set; }
12731272
public System.Text.Json.Nodes.JsonNode Value { get; }
12741273
public override Microsoft.OpenApi.Models.Interfaces.IOpenApiExample CopyReferenceAsTargetElementWithOverrides(Microsoft.OpenApi.Models.Interfaces.IOpenApiExample source) { }
1274+
public Microsoft.OpenApi.Models.Interfaces.IOpenApiExample CreateShallowCopy() { }
12751275
public override void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
12761276
}
1277-
public class OpenApiHeaderReference : Microsoft.OpenApi.Models.References.BaseOpenApiReferenceHolder<Microsoft.OpenApi.Models.OpenApiHeader, Microsoft.OpenApi.Models.Interfaces.IOpenApiHeader>, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable, Microsoft.OpenApi.Models.Interfaces.IOpenApiDescribedElement, Microsoft.OpenApi.Models.Interfaces.IOpenApiHeader
1277+
public class OpenApiHeaderReference : Microsoft.OpenApi.Models.References.BaseOpenApiReferenceHolder<Microsoft.OpenApi.Models.OpenApiHeader, Microsoft.OpenApi.Models.Interfaces.IOpenApiHeader>, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable, Microsoft.OpenApi.Interfaces.IShallowCopyable<Microsoft.OpenApi.Models.Interfaces.IOpenApiHeader>, Microsoft.OpenApi.Models.Interfaces.IOpenApiDescribedElement, Microsoft.OpenApi.Models.Interfaces.IOpenApiHeader
12781278
{
1279-
public OpenApiHeaderReference(Microsoft.OpenApi.Models.References.OpenApiHeaderReference header) { }
12801279
public OpenApiHeaderReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { }
12811280
public bool AllowEmptyValue { get; }
12821281
public bool AllowReserved { get; }
@@ -1291,10 +1290,10 @@ namespace Microsoft.OpenApi.Models.References
12911290
public Microsoft.OpenApi.Models.Interfaces.IOpenApiSchema Schema { get; }
12921291
public Microsoft.OpenApi.Models.ParameterStyle? Style { get; }
12931292
public override Microsoft.OpenApi.Models.Interfaces.IOpenApiHeader CopyReferenceAsTargetElementWithOverrides(Microsoft.OpenApi.Models.Interfaces.IOpenApiHeader source) { }
1293+
public Microsoft.OpenApi.Models.Interfaces.IOpenApiHeader CreateShallowCopy() { }
12941294
}
12951295
public class OpenApiLinkReference : Microsoft.OpenApi.Models.References.BaseOpenApiReferenceHolder<Microsoft.OpenApi.Models.OpenApiLink, Microsoft.OpenApi.Models.Interfaces.IOpenApiLink>, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable, Microsoft.OpenApi.Models.Interfaces.IOpenApiDescribedElement, Microsoft.OpenApi.Models.Interfaces.IOpenApiLink
12961296
{
1297-
public OpenApiLinkReference(Microsoft.OpenApi.Models.References.OpenApiLinkReference reference) { }
12981297
public OpenApiLinkReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { }
12991298
public string Description { get; set; }
13001299
public System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.Interfaces.IOpenApiExtension> Extensions { get; }
@@ -1308,7 +1307,6 @@ namespace Microsoft.OpenApi.Models.References
13081307
}
13091308
public class OpenApiParameterReference : Microsoft.OpenApi.Models.References.BaseOpenApiReferenceHolder<Microsoft.OpenApi.Models.OpenApiParameter, Microsoft.OpenApi.Models.Interfaces.IOpenApiParameter>, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReadOnlyExtensible, Microsoft.OpenApi.Interfaces.IOpenApiSerializable, Microsoft.OpenApi.Models.Interfaces.IOpenApiDescribedElement, Microsoft.OpenApi.Models.Interfaces.IOpenApiParameter
13101309
{
1311-
public OpenApiParameterReference(Microsoft.OpenApi.Models.References.OpenApiParameterReference parameter) { }
13121310
public OpenApiParameterReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { }
13131311
public bool AllowEmptyValue { get; }
13141312
public bool AllowReserved { get; }

0 commit comments

Comments
 (0)