5
5
using System . Collections . Generic ;
6
6
using Microsoft . OpenApi . Interfaces ;
7
7
using Microsoft . OpenApi . Models . Interfaces ;
8
- using Microsoft . OpenApi . Writers ;
9
8
10
9
namespace Microsoft . OpenApi . Models . References
11
10
{
12
11
/// <summary>
13
12
/// Response Object Reference.
14
13
/// </summary>
15
- public class OpenApiResponseReference : OpenApiResponse , IOpenApiReferenceHolder < OpenApiResponse >
14
+ public class OpenApiResponseReference : BaseOpenApiReferenceHolder < OpenApiResponse , IOpenApiResponse > , IOpenApiResponse
16
15
{
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
-
36
16
/// <summary>
37
17
/// Constructor initializing the reference object.
38
18
/// </summary>
@@ -43,102 +23,43 @@ public OpenApiResponse Target
43
23
/// 1. a absolute/relative file path, for example: ../commons/pet.json
44
24
/// 2. a Url, for example: http://localhost/pet.json
45
25
/// </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 )
47
27
{
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 ;
59
28
}
60
29
61
- internal OpenApiResponseReference ( string referenceId , OpenApiResponse target )
30
+ internal OpenApiResponseReference ( OpenApiResponse target , string referenceId ) : base ( target , referenceId , ReferenceType . Response )
62
31
{
63
- _target ??= target ;
64
-
65
- _reference = new OpenApiReference ( )
66
- {
67
- Id = referenceId ,
68
- Type = ReferenceType . Response ,
69
- } ;
70
-
71
- Reference = _reference ;
72
32
}
73
33
74
34
/// <inheritdoc/>
75
- public override string Description
35
+ public string Description
76
36
{
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
+ }
79
45
}
80
46
81
- private IDictionary < string , OpenApiMediaType > _content ;
82
47
/// <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 ; }
84
49
85
- private IDictionary < string , IOpenApiHeader > _headers ;
86
50
/// <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 ; }
88
52
89
- private IDictionary < string , IOpenApiLink > _links ;
90
53
/// <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 ; }
92
55
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
-
97
56
/// <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 ; }
135
58
136
59
/// <inheritdoc/>
137
- private void SerializeInternal ( IOpenApiWriter writer ,
138
- Action < IOpenApiWriter , IOpenApiReferenceable > action )
60
+ public override IOpenApiResponse CopyReferenceAsTargetElementWithOverrides ( IOpenApiResponse source )
139
61
{
140
- Utils . CheckArgumentNull ( writer ) ;
141
- action ( writer , this ) ;
62
+ return source is OpenApiResponse ? new OpenApiResponse ( this ) : source ;
142
63
}
143
64
}
144
65
}
0 commit comments