5
5
using System . Collections . Generic ;
6
6
using Microsoft . OpenApi . Expressions ;
7
7
using Microsoft . OpenApi . Interfaces ;
8
+ using Microsoft . OpenApi . Models . Interfaces ;
8
9
using Microsoft . OpenApi . Writers ;
9
10
10
11
namespace Microsoft . OpenApi . Models . References
11
12
{
12
13
/// <summary>
13
14
/// Callback Object Reference: A reference to a map of possible out-of band callbacks related to the parent operation.
14
15
/// </summary>
15
- public class OpenApiCallbackReference : OpenApiCallback , IOpenApiReferenceHolder < OpenApiCallback >
16
+ public class OpenApiCallbackReference : IOpenApiCallback , IOpenApiReferenceHolder < OpenApiCallback , IOpenApiCallback >
16
17
{
17
18
#nullable enable
18
19
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 ; }
20
25
21
26
/// <summary>
22
27
/// Gets the target callback.
@@ -29,7 +34,7 @@ public OpenApiCallback Target
29
34
{
30
35
get
31
36
{
32
- _target ??= Reference . HostDocument . ResolveReferenceTo < OpenApiCallback > ( _reference ) ;
37
+ _target ??= Reference . HostDocument . ResolveReferenceTo < OpenApiCallback > ( Reference ) ;
33
38
return _target ;
34
39
}
35
40
}
@@ -48,41 +53,49 @@ public OpenApiCallbackReference(string referenceId, OpenApiDocument hostDocument
48
53
{
49
54
Utils . CheckArgumentNullOrEmpty ( referenceId ) ;
50
55
51
- _reference = new OpenApiReference ( )
56
+ Reference = new OpenApiReference ( )
52
57
{
53
58
Id = referenceId ,
54
59
HostDocument = hostDocument ,
55
60
Type = ReferenceType . Callback ,
56
61
ExternalResource = externalResource
57
62
} ;
63
+ }
58
64
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 ;
60
74
}
61
75
62
76
internal OpenApiCallbackReference ( OpenApiCallback target , string referenceId )
63
77
{
64
78
_target = target ;
65
79
66
- _reference = new OpenApiReference ( )
80
+ Reference = new OpenApiReference ( )
67
81
{
68
82
Id = referenceId ,
69
83
Type = ReferenceType . Callback ,
70
84
} ;
71
85
}
72
86
73
87
/// <inheritdoc/>
74
- public override Dictionary < RuntimeExpression , OpenApiPathItem > PathItems { get => Target . PathItems ; set => Target . PathItems = value ; }
88
+ public Dictionary < RuntimeExpression , OpenApiPathItem > PathItems { get => Target . PathItems ; }
75
89
76
90
/// <inheritdoc/>
77
- public override IDictionary < string , IOpenApiExtension > Extensions { get => Target . Extensions ; set => Target . Extensions = value ; }
91
+ public IDictionary < string , IOpenApiExtension > Extensions { get => Target . Extensions ; }
78
92
79
93
/// <inheritdoc/>
80
- public override void SerializeAsV3 ( IOpenApiWriter writer )
94
+ public void SerializeAsV3 ( IOpenApiWriter writer )
81
95
{
82
- if ( ! writer . GetSettings ( ) . ShouldInlineReference ( _reference ) )
96
+ if ( ! writer . GetSettings ( ) . ShouldInlineReference ( Reference ) )
83
97
{
84
- _reference . SerializeAsV3 ( writer ) ;
85
- return ;
98
+ Reference . SerializeAsV3 ( writer ) ;
86
99
}
87
100
else
88
101
{
@@ -91,19 +104,33 @@ public override void SerializeAsV3(IOpenApiWriter writer)
91
104
}
92
105
93
106
/// <inheritdoc/>
94
- public override void SerializeAsV31 ( IOpenApiWriter writer )
107
+ public void SerializeAsV31 ( IOpenApiWriter writer )
95
108
{
96
- if ( ! writer . GetSettings ( ) . ShouldInlineReference ( _reference ) )
109
+ if ( ! writer . GetSettings ( ) . ShouldInlineReference ( Reference ) )
97
110
{
98
- _reference . SerializeAsV31 ( writer ) ;
99
- return ;
111
+ Reference . SerializeAsV31 ( writer ) ;
100
112
}
101
113
else
102
114
{
103
115
SerializeInternal ( writer , ( writer , element ) => element . SerializeAsV31 ( writer ) ) ;
104
116
}
105
117
}
106
118
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
+
107
134
/// <inheritdoc/>
108
135
private void SerializeInternal ( IOpenApiWriter writer ,
109
136
Action < IOpenApiWriter , IOpenApiReferenceable > action )
0 commit comments