Skip to content

Commit cd04b83

Browse files
authored
Reference Service V2 should use V2 Deserializers (#124)
* Reference Service V2 should use V2 Deserializers
1 parent 896e874 commit cd04b83

File tree

13 files changed

+395
-43
lines changed

13 files changed

+395
-43
lines changed

src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,17 @@
3636
<AutoGen>True</AutoGen>
3737
<DependentUpon>Resource.resx</DependentUpon>
3838
</Compile>
39+
<Compile Update="Properties\SRResource.Designer.cs">
40+
<DesignTime>True</DesignTime>
41+
<AutoGen>True</AutoGen>
42+
<DependentUpon>SRResource.resx</DependentUpon>
43+
</Compile>
3944
</ItemGroup>
4045

4146
<ItemGroup>
42-
<EmbeddedResource Update="Properties\Resource.resx">
47+
<EmbeddedResource Update="Properties\SRResource.resx">
4348
<Generator>ResXFileCodeGenerator</Generator>
44-
<LastGenOutput>Resource.Designer.cs</LastGenOutput>
49+
<LastGenOutput>SRResource.Designer.cs</LastGenOutput>
4550
</EmbeddedResource>
4651
</ItemGroup>
4752
</Project>

src/Microsoft.OpenApi.Readers/ParsingContext.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.
44
// ------------------------------------------------------------
55

6+
using System;
67
using System.Collections.Generic;
78
using System.Linq;
89
using Microsoft.OpenApi.Interfaces;

src/Microsoft.OpenApi.Readers/Properties/SRResource.Designer.cs

Lines changed: 12 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Microsoft.OpenApi.Readers/Properties/SRResource.resx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,10 @@
126126
<data name="ReferenceHasInvalidFormat" xml:space="preserve">
127127
<value>The reference string '{0}' has invalid format.</value>
128128
</data>
129-
<data name="ReferenceHasInvalidValue" xml:space="preserve">
130-
<value>Unknown type of $ref '{0}' at '{1}'.</value>
129+
<data name="ReferenceV2HasInvalidValue" xml:space="preserve">
130+
<value>Unknown type of $ref '{0}' at '{1}' for V2 document.</value>
131+
</data>
132+
<data name="ReferenceV3HasInvalidValue" xml:space="preserve">
133+
<value>Unknown type of $ref '{0}' at '{1}' for V3 document.</value>
131134
</data>
132135
</root>

src/Microsoft.OpenApi.Readers/ReferenceServices/OpenApiV2ReferenceService.cs

Lines changed: 6 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -91,45 +91,25 @@ public bool TryLoadReference(OpenApiReference reference, out IOpenApiReferenceab
9191
switch (reference.Type)
9292
{
9393
case ReferenceType.Schema:
94-
referencedObject = OpenApiV3Deserializer.LoadSchema(node);
94+
referencedObject = OpenApiV2Deserializer.LoadSchema(node);
9595
break;
9696

9797
case ReferenceType.Response:
98-
referencedObject = OpenApiV3Deserializer.LoadResponse(node);
98+
referencedObject = OpenApiV2Deserializer.LoadResponse(node);
9999
break;
100100

101101
case ReferenceType.Parameter:
102-
referencedObject = OpenApiV3Deserializer.LoadParameter(node);
103-
break;
104-
105-
case ReferenceType.Example:
106-
referencedObject = OpenApiV3Deserializer.LoadExample(node);
107-
break;
108-
109-
case ReferenceType.RequestBody:
110-
referencedObject = OpenApiV3Deserializer.LoadRequestBody(node);
111-
break;
112-
113-
case ReferenceType.Header:
114-
referencedObject = OpenApiV3Deserializer.LoadHeader(node);
102+
referencedObject = OpenApiV2Deserializer.LoadParameter(node);
115103
break;
116104

117105
case ReferenceType.SecurityScheme:
118-
referencedObject = OpenApiV3Deserializer.LoadSecurityScheme(node);
119-
break;
120-
121-
case ReferenceType.Link:
122-
referencedObject = OpenApiV3Deserializer.LoadLink(node);
123-
break;
124-
125-
case ReferenceType.Callback:
126-
referencedObject = OpenApiV3Deserializer.LoadCallback(node);
106+
referencedObject = OpenApiV2Deserializer.LoadSecurityScheme(node);
127107
break;
128108

129109
default:
130110
throw new OpenApiException(
131111
string.Format(
132-
SRResource.ReferenceHasInvalidValue,
112+
SRResource.ReferenceV2HasInvalidValue,
133113
reference.Type,
134114
jsonPointer));
135115
}
@@ -205,9 +185,6 @@ private static string GetReferenceTypeV2Name(ReferenceType referenceType)
205185
case ReferenceType.Response:
206186
return "responses";
207187

208-
case ReferenceType.Header:
209-
return "headers";
210-
211188
case ReferenceType.Tag:
212189
return "tags";
213190

@@ -253,7 +230,7 @@ public OpenApiReference ConvertToOpenApiReference(string reference, ReferenceTyp
253230
{
254231
if (reference.StartsWith("#"))
255232
{
256-
// "$ref": "#/components/schemas/Pet"
233+
// "$ref": "#/definitions/Pet"
257234
return ParseLocalReference(segments[1]);
258235
}
259236

src/Microsoft.OpenApi.Readers/ReferenceServices/OpenApiV3ReferenceService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ public bool TryLoadReference(OpenApiReference reference, out IOpenApiReferenceab
181181
default:
182182
throw new OpenApiException(
183183
string.Format(
184-
SRResource.ReferenceHasInvalidValue,
184+
SRResource.ReferenceV3HasInvalidValue,
185185
reference.Type,
186186
componentJsonPointer));
187187
}

src/Microsoft.OpenApi.Readers/V2/OpenApiParameterDeserializer.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ namespace Microsoft.OpenApi.Readers.V2
1818
/// </summary>
1919
internal static partial class OpenApiV2Deserializer
2020
{
21+
private static ParameterLocation? _in;
22+
2123
private static readonly FixedFieldMap<OpenApiParameter> ParameterFixedFields =
2224
new FixedFieldMap<OpenApiParameter>
2325
{
@@ -178,6 +180,7 @@ private static OpenApiSchema GetOrCreateSchema(OpenApiParameter p)
178180
{
179181
p.Schema = new OpenApiSchema();
180182
}
183+
181184
return p.Schema;
182185
}
183186

@@ -187,6 +190,7 @@ private static OpenApiSchema GetOrCreateSchema(OpenApiHeader p)
187190
{
188191
p.Schema = new OpenApiSchema();
189192
}
193+
190194
return p.Schema;
191195
}
192196

@@ -195,6 +199,8 @@ private static void ProcessIn(OpenApiParameter o, ParseNode n)
195199
var value = n.GetScalarValue();
196200
switch (value)
197201
{
202+
// TODO: There could be multiple body/form parameters, so setting it to a global storage
203+
// will overwrite the old parameter. Need to handle this on a per-parameter basis.
198204
case "body":
199205
n.Context.SetTempStorage("bodyParameter", o);
200206
break;
@@ -208,13 +214,17 @@ private static void ProcessIn(OpenApiParameter o, ParseNode n)
208214
formParameters.Add(o);
209215
break;
210216
default:
211-
o.In = value.GetEnumFromDisplayName<ParameterLocation>();
217+
_in = value.GetEnumFromDisplayName<ParameterLocation>();
218+
o.In = _in;
212219
break;
213220
}
214221
}
215222

216223
public static OpenApiParameter LoadParameter(ParseNode node)
217224
{
225+
// Reset the local variables every time this method is called.
226+
_in = null;
227+
218228
var mapNode = node.CheckMapNode("parameter");
219229

220230
var pointer = mapNode.GetReferencePointer();
@@ -234,7 +244,7 @@ public static OpenApiParameter LoadParameter(ParseNode node)
234244
node.Context.SetTempStorage("schema", null);
235245
}
236246

237-
if (parameter.In == 0)
247+
if (_in == null)
238248
{
239249
return null; // Don't include Form or Body parameters in OpenApiOperation.Parameters list
240250
}

src/Microsoft.OpenApi.Readers/V2/OpenApiResponseDeserializer.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,9 @@ private static void ProcessProduces(OpenApiResponse response, ParsingContext con
6666
{
6767
Schema = schema
6868
};
69+
70+
response.Content.Add(mt, mediaType);
6971
}
70-
response.Content.Add(mt, mediaType);
7172
}
7273
}
7374

src/Microsoft.OpenApi.Readers/V2/OpenApiSchemaDeserializer.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,13 +148,13 @@ internal static partial class OpenApiV2Deserializer
148148
{
149149
"description", (o, n) =>
150150
{
151-
o.Type = n.GetScalarValue();
151+
o.Description = n.GetScalarValue();
152152
}
153153
},
154154
{
155155
"format", (o, n) =>
156156
{
157-
o.Description = n.GetScalarValue();
157+
o.Format = n.GetScalarValue();
158158
}
159159
},
160160
{

src/Microsoft.OpenApi/Models/OpenApiParameter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public class OpenApiParameter : IOpenApiSerializable, IOpenApiReferenceable, IOp
3333
/// REQUIRED. The location of the parameter.
3434
/// Possible values are "query", "header", "path" or "cookie".
3535
/// </summary>
36-
public ParameterLocation In { get; set; }
36+
public ParameterLocation? In { get; set; }
3737

3838
/// <summary>
3939
/// A brief description of the parameter. This could contain examples of use.

0 commit comments

Comments
 (0)