55using System . Collections . Generic ;
66using Microsoft . OpenApi . Interfaces ;
77using Microsoft . OpenApi . Models . Interfaces ;
8- using Microsoft . OpenApi . Writers ;
98
109namespace Microsoft . OpenApi . Models . References
1110{
1211 /// <summary>
1312 /// Response Object Reference.
1413 /// </summary>
15- public class OpenApiResponseReference : OpenApiResponse , IOpenApiReferenceHolder < OpenApiResponse >
14+ public class OpenApiResponseReference : BaseOpenApiReferenceHolder < OpenApiResponse , IOpenApiResponse > , IOpenApiResponse
1615 {
17- internal OpenApiResponse _target ;
18- private readonly OpenApiReference _reference ;
19- private string _description ;
20-
21- /// <summary>
22- /// Gets the target response.
23- /// </summary>
24- /// <remarks>
25- /// If the reference is not resolved, this will return null.
26- /// </remarks>
27- public OpenApiResponse Target
28- {
29- get
30- {
31- _target ??= Reference . HostDocument ? . ResolveReferenceTo < OpenApiResponse > ( _reference ) ;
32- return _target ;
33- }
34- }
35-
3616 /// <summary>
3717 /// Constructor initializing the reference object.
3818 /// </summary>
@@ -43,102 +23,43 @@ public OpenApiResponse Target
4323 /// 1. a absolute/relative file path, for example: ../commons/pet.json
4424 /// 2. a Url, for example: http://localhost/pet.json
4525 /// </param>
46- public OpenApiResponseReference ( string referenceId , OpenApiDocument hostDocument , string externalResource = null )
26+ public OpenApiResponseReference ( string referenceId , OpenApiDocument hostDocument , string externalResource = null ) : base ( referenceId , hostDocument , ReferenceType . Response , externalResource )
4727 {
48- Utils . CheckArgumentNullOrEmpty ( referenceId ) ;
49-
50- _reference = new OpenApiReference ( )
51- {
52- Id = referenceId ,
53- HostDocument = hostDocument ,
54- Type = ReferenceType . Response ,
55- ExternalResource = externalResource
56- } ;
57-
58- Reference = _reference ;
5928 }
6029
61- internal OpenApiResponseReference ( string referenceId , OpenApiResponse target )
30+ internal OpenApiResponseReference ( OpenApiResponse target , string referenceId ) : base ( target , referenceId , ReferenceType . Response )
6231 {
63- _target ??= target ;
64-
65- _reference = new OpenApiReference ( )
66- {
67- Id = referenceId ,
68- Type = ReferenceType . Response ,
69- } ;
70-
71- Reference = _reference ;
7232 }
7333
7434 /// <inheritdoc/>
75- public override string Description
35+ public string Description
7636 {
77- get => string . IsNullOrEmpty ( _description ) ? Target ? . Description : _description ;
78- set => _description = value ;
37+ get => string . IsNullOrEmpty ( Reference ? . Description ) ? Target ? . Description : Reference . Description ;
38+ set
39+ {
40+ if ( Reference is not null )
41+ {
42+ Reference . Description = value ;
43+ }
44+ }
7945 }
8046
81- private IDictionary < string , OpenApiMediaType > _content ;
8247 /// <inheritdoc/>
83- public override IDictionary < string , OpenApiMediaType > Content { get => _content is not null ? _content : Target ? . Content ; set => _content = value ; }
48+ public IDictionary < string , OpenApiMediaType > Content { get => Target ? . Content ; }
8449
85- private IDictionary < string , IOpenApiHeader > _headers ;
8650 /// <inheritdoc/>
87- public override IDictionary < string , IOpenApiHeader > Headers { get => _headers is not null ? _headers : Target ? . Headers ; set => _headers = value ; }
51+ public IDictionary < string , IOpenApiHeader > Headers { get => Target ? . Headers ; }
8852
89- private IDictionary < string , IOpenApiLink > _links ;
9053 /// <inheritdoc/>
91- public override IDictionary < string , IOpenApiLink > Links { get => _links is not null ? _links : Target ? . Links ; set => _links = value ; }
54+ public IDictionary < string , IOpenApiLink > Links { get => Target ? . Links ; }
9255
93- private IDictionary < string , IOpenApiExtension > _extensions ;
94- /// <inheritdoc/>
95- public override IDictionary < string , IOpenApiExtension > Extensions { get => _extensions is not null ? _extensions : Target ? . Extensions ; set => _extensions = value ; }
96-
9756 /// <inheritdoc/>
98- public override void SerializeAsV3 ( IOpenApiWriter writer )
99- {
100- if ( ! writer . GetSettings ( ) . ShouldInlineReference ( _reference ) )
101- {
102- _reference . SerializeAsV3 ( writer ) ;
103- }
104- else
105- {
106- SerializeInternal ( writer , ( writer , element ) => element . SerializeAsV3 ( writer ) ) ;
107- }
108- }
109-
110- /// <inheritdoc/>
111- public override void SerializeAsV31 ( IOpenApiWriter writer )
112- {
113- if ( ! writer . GetSettings ( ) . ShouldInlineReference ( _reference ) )
114- {
115- _reference . SerializeAsV31 ( writer ) ;
116- }
117- else
118- {
119- SerializeInternal ( writer , ( writer , element ) => element . SerializeAsV31 ( writer ) ) ;
120- }
121- }
122-
123- /// <inheritdoc/>
124- public override void SerializeAsV2 ( IOpenApiWriter writer )
125- {
126- if ( ! writer . GetSettings ( ) . ShouldInlineReference ( _reference ) )
127- {
128- _reference . SerializeAsV2 ( writer ) ;
129- }
130- else
131- {
132- SerializeInternal ( writer , ( writer , element ) => element . SerializeAsV2 ( writer ) ) ;
133- }
134- }
57+ public IDictionary < string , IOpenApiExtension > Extensions { get => Target ? . Extensions ; }
13558
13659 /// <inheritdoc/>
137- private void SerializeInternal ( IOpenApiWriter writer ,
138- Action < IOpenApiWriter , IOpenApiReferenceable > action )
60+ public override IOpenApiResponse CopyReferenceAsTargetElementWithOverrides ( IOpenApiResponse source )
13961 {
140- Utils . CheckArgumentNull ( writer ) ;
141- action ( writer , this ) ;
62+ return source is OpenApiResponse ? new OpenApiResponse ( this ) : source ;
14263 }
14364 }
14465}
0 commit comments