55using System . Collections . Generic ;
66using Microsoft . OpenApi . Expressions ;
77using Microsoft . OpenApi . Interfaces ;
8+ using Microsoft . OpenApi . Models . Interfaces ;
89using Microsoft . OpenApi . Writers ;
910
1011namespace Microsoft . OpenApi . Models . References
1112{
1213 /// <summary>
1314 /// Callback Object Reference: A reference to a map of possible out-of band callbacks related to the parent operation.
1415 /// </summary>
15- public class OpenApiCallbackReference : OpenApiCallback , IOpenApiReferenceHolder < OpenApiCallback >
16+ public class OpenApiCallbackReference : IOpenApiCallback , IOpenApiReferenceHolder < OpenApiCallback , IOpenApiCallback >
1617 {
1718#nullable enable
1819 internal OpenApiCallback _target ;
19- private readonly OpenApiReference _reference ;
20+ /// <inheritdoc/>
21+ public OpenApiReference Reference { get ; set ; }
22+
23+ /// <inheritdoc/>
24+ public bool UnresolvedReference { get ; set ; }
2025
2126 /// <summary>
2227 /// Gets the target callback.
@@ -29,7 +34,7 @@ public OpenApiCallback Target
2934 {
3035 get
3136 {
32- _target ??= Reference . HostDocument . ResolveReferenceTo < OpenApiCallback > ( _reference ) ;
37+ _target ??= Reference . HostDocument . ResolveReferenceTo < OpenApiCallback > ( Reference ) ;
3338 return _target ;
3439 }
3540 }
@@ -48,41 +53,49 @@ public OpenApiCallbackReference(string referenceId, OpenApiDocument hostDocument
4853 {
4954 Utils . CheckArgumentNullOrEmpty ( referenceId ) ;
5055
51- _reference = new OpenApiReference ( )
56+ Reference = new OpenApiReference ( )
5257 {
5358 Id = referenceId ,
5459 HostDocument = hostDocument ,
5560 Type = ReferenceType . Callback ,
5661 ExternalResource = externalResource
5762 } ;
63+ }
5864
59- Reference = _reference ;
65+ /// <summary>
66+ /// Copy constructor
67+ /// </summary>
68+ /// <param name="callback">The callback reference to copy</param>
69+ public OpenApiCallbackReference ( OpenApiCallbackReference callback )
70+ {
71+ Utils . CheckArgumentNull ( callback ) ;
72+ Reference = callback ? . Reference != null ? new ( callback . Reference ) : null ;
73+ UnresolvedReference = callback ? . UnresolvedReference ?? false ;
6074 }
6175
6276 internal OpenApiCallbackReference ( OpenApiCallback target , string referenceId )
6377 {
6478 _target = target ;
6579
66- _reference = new OpenApiReference ( )
80+ Reference = new OpenApiReference ( )
6781 {
6882 Id = referenceId ,
6983 Type = ReferenceType . Callback ,
7084 } ;
7185 }
7286
7387 /// <inheritdoc/>
74- public override Dictionary < RuntimeExpression , OpenApiPathItem > PathItems { get => Target . PathItems ; set => Target . PathItems = value ; }
88+ public Dictionary < RuntimeExpression , OpenApiPathItem > PathItems { get => Target . PathItems ; }
7589
7690 /// <inheritdoc/>
77- public override IDictionary < string , IOpenApiExtension > Extensions { get => Target . Extensions ; set => Target . Extensions = value ; }
91+ public IDictionary < string , IOpenApiExtension > Extensions { get => Target . Extensions ; }
7892
7993 /// <inheritdoc/>
80- public override void SerializeAsV3 ( IOpenApiWriter writer )
94+ public void SerializeAsV3 ( IOpenApiWriter writer )
8195 {
82- if ( ! writer . GetSettings ( ) . ShouldInlineReference ( _reference ) )
96+ if ( ! writer . GetSettings ( ) . ShouldInlineReference ( Reference ) )
8397 {
84- _reference . SerializeAsV3 ( writer ) ;
85- return ;
98+ Reference . SerializeAsV3 ( writer ) ;
8699 }
87100 else
88101 {
@@ -91,19 +104,33 @@ public override void SerializeAsV3(IOpenApiWriter writer)
91104 }
92105
93106 /// <inheritdoc/>
94- public override void SerializeAsV31 ( IOpenApiWriter writer )
107+ public void SerializeAsV31 ( IOpenApiWriter writer )
95108 {
96- if ( ! writer . GetSettings ( ) . ShouldInlineReference ( _reference ) )
109+ if ( ! writer . GetSettings ( ) . ShouldInlineReference ( Reference ) )
97110 {
98- _reference . SerializeAsV31 ( writer ) ;
99- return ;
111+ Reference . SerializeAsV31 ( writer ) ;
100112 }
101113 else
102114 {
103115 SerializeInternal ( writer , ( writer , element ) => element . SerializeAsV31 ( writer ) ) ;
104116 }
105117 }
106118
119+ /// <inheritdoc/>
120+ public IOpenApiCallback CopyReferenceAsTargetElementWithOverrides ( IOpenApiCallback openApiExample )
121+ {
122+ // the copy here is never called since callbacks do not have any overridable fields.
123+ // if the spec evolves to include overridable fields for callbacks, the serialize methods will need to call this copy method.
124+ return openApiExample is OpenApiCallback ? new OpenApiCallback ( this ) : openApiExample ;
125+ }
126+
127+ /// <inheritdoc/>
128+ public void SerializeAsV2 ( IOpenApiWriter writer )
129+ {
130+ // examples components are not supported in OAS 2.0
131+ Reference . SerializeAsV2 ( writer ) ;
132+ }
133+
107134 /// <inheritdoc/>
108135 private void SerializeInternal ( IOpenApiWriter writer ,
109136 Action < IOpenApiWriter , IOpenApiReferenceable > action )
0 commit comments