Skip to content

Commit c93a9d7

Browse files
committed
Fix schema deserialization
1 parent c94ef0f commit c93a9d7

File tree

4 files changed

+112
-13
lines changed

4 files changed

+112
-13
lines changed

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

Lines changed: 104 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

4+
using System;
5+
using Microsoft.OpenApi.Any;
46
using Microsoft.OpenApi.Extensions;
57
using Microsoft.OpenApi.Models;
68
using Microsoft.OpenApi.Readers.ParseNodes;
@@ -22,41 +24,108 @@ internal static partial class OpenApiV2Deserializer
2224
}
2325
},
2426
{
25-
"required", (o, n) =>
27+
"type", (o, n) =>
2628
{
27-
o.Required = bool.Parse(n.GetScalarValue());
29+
GetOrCreateSchema(o).Type = n.GetScalarValue();
2830
}
2931
},
3032
{
31-
"deprecated", (o, n) =>
33+
"format", (o, n) =>
3234
{
33-
o.Deprecated = bool.Parse(n.GetScalarValue());
35+
GetOrCreateSchema(o).Format = n.GetScalarValue();
3436
}
3537
},
3638
{
37-
"allowReserved", (o, n) =>
39+
"items", (o, n) =>
3840
{
39-
o.AllowReserved = bool.Parse(n.GetScalarValue());
41+
GetOrCreateSchema(o).Items = LoadSchema(n);
4042
}
4143
},
4244
{
43-
"style", (o, n) =>
45+
"collectionFormat", (o, n) =>
4446
{
45-
o.Style = n.GetScalarValue().GetEnumFromDisplayName<ParameterStyle>();
47+
LoadStyle(o, n.GetScalarValue());
4648
}
4749
},
4850
{
49-
"type", (o, n) =>
51+
"default", (o, n) =>
5052
{
51-
GetOrCreateSchema(o).Type = n.GetScalarValue();
53+
GetOrCreateSchema(o).Default = n.CreateAny();
54+
}
55+
},
56+
{
57+
"maximum", (o, n) =>
58+
{
59+
GetOrCreateSchema(o).Maximum = decimal.Parse(n.GetScalarValue());
5260
}
5361
},
5462
{
55-
"format", (o, n) =>
63+
"exclusiveMaximum", (o, n) =>
5664
{
57-
GetOrCreateSchema(o).Format = n.GetScalarValue();
65+
GetOrCreateSchema(o).ExclusiveMaximum = bool.Parse(n.GetScalarValue());
66+
}
67+
},
68+
{
69+
"minimum", (o, n) =>
70+
{
71+
GetOrCreateSchema(o).Minimum = decimal.Parse(n.GetScalarValue());
5872
}
5973
},
74+
{
75+
"exclusiveMinimum", (o, n) =>
76+
{
77+
GetOrCreateSchema(o).ExclusiveMinimum = bool.Parse(n.GetScalarValue());
78+
}
79+
},
80+
{
81+
"maxLength", (o, n) =>
82+
{
83+
GetOrCreateSchema(o).MaxLength = int.Parse(n.GetScalarValue());
84+
}
85+
},
86+
{
87+
"minLength", (o, n) =>
88+
{
89+
GetOrCreateSchema(o).MinLength = int.Parse(n.GetScalarValue());
90+
}
91+
},
92+
{
93+
"pattern", (o, n) =>
94+
{
95+
GetOrCreateSchema(o).Pattern = n.GetScalarValue();
96+
}
97+
},
98+
{
99+
"maxItems", (o, n) =>
100+
{
101+
GetOrCreateSchema(o).MaxItems = int.Parse(n.GetScalarValue());
102+
}
103+
},
104+
{
105+
"minItems", (o, n) =>
106+
{
107+
GetOrCreateSchema(o).MinItems = int.Parse(n.GetScalarValue());
108+
}
109+
},
110+
{
111+
"uniqueItems", (o, n) =>
112+
{
113+
GetOrCreateSchema(o).UniqueItems = bool.Parse(n.GetScalarValue());
114+
}
115+
},
116+
{
117+
"multipleOf", (o, n) =>
118+
{
119+
GetOrCreateSchema(o).MultipleOf = decimal.Parse(n.GetScalarValue());
120+
}
121+
},
122+
{
123+
"enum", (o, n) =>
124+
{
125+
GetOrCreateSchema(o).Enum =
126+
n.CreateSimpleList<IOpenApiAny>(l => new OpenApiString(l.GetScalarValue()));
127+
}
128+
}
60129
};
61130

62131
private static readonly PatternFieldMap<OpenApiHeader> _headerPatternFields = new PatternFieldMap<OpenApiHeader>
@@ -82,5 +151,28 @@ public static OpenApiHeader LoadHeader(ParseNode node)
82151

83152
return header;
84153
}
154+
155+
156+
private static void LoadStyle(OpenApiHeader h, string v)
157+
{
158+
switch (v)
159+
{
160+
case "csv":
161+
h.Style = ParameterStyle.Simple;
162+
return;
163+
case "ssv":
164+
h.Style = ParameterStyle.SpaceDelimited;
165+
return;
166+
case "pipes":
167+
h.Style = ParameterStyle.PipeDelimited;
168+
return;
169+
case "tsv":
170+
throw new NotSupportedException();
171+
case "multi":
172+
h.Style = ParameterStyle.Form;
173+
h.Explode = true;
174+
return;
175+
}
176+
}
85177
}
86178
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ internal static partial class OpenApiV2Deserializer
120120
{
121121
"default", (o, n) =>
122122
{
123-
GetOrCreateSchema(o).Default = new OpenApiString(n.GetScalarValue());
123+
GetOrCreateSchema(o).Default = n.CreateAny();
124124
}
125125
},
126126
{

test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiParameterTests.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
using System.IO;
55
using FluentAssertions;
6+
using Microsoft.OpenApi.Any;
67
using Microsoft.OpenApi.Models;
78
using Microsoft.OpenApi.Readers.ParseNodes;
89
using Microsoft.OpenApi.Readers.V2;
@@ -137,13 +138,18 @@ public void ParseHeaderParameterShouldSucceed()
137138
Description = "token to be passed as a header",
138139
Required = true,
139140
Style = ParameterStyle.Simple,
141+
140142
Schema = new OpenApiSchema
141143
{
142144
Type = "array",
143145
Items = new OpenApiSchema
144146
{
145147
Type = "integer",
146148
Format = "int64"
149+
},
150+
Default = new OpenApiArray() {
151+
new OpenApiInteger(1),
152+
new OpenApiInteger(2)
147153
}
148154
}
149155
});

test/Microsoft.OpenApi.Readers.Tests/V2Tests/Samples/OpenApiParameter/headerParameter.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ in: header
44
description: token to be passed as a header
55
required: true
66
type: array
7+
default: [1,2]
78
items:
89
type: integer
910
format: int64

0 commit comments

Comments
 (0)