Skip to content

Commit d2ad750

Browse files
committed
Change the style in Parameter to use enum type
1 parent f49a05f commit d2ad750

File tree

5 files changed

+68
-59
lines changed

5 files changed

+68
-59
lines changed

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -155,18 +155,18 @@ private static void LoadStyle(OpenApiParameter p, string v)
155155
switch (v)
156156
{
157157
case "csv":
158-
p.Style = "simple";
158+
p.Style = ParameterStyle.Simple;
159159
return;
160160
case "ssv":
161-
p.Style = "spaceDelimited";
161+
p.Style = ParameterStyle.SpaceDelimited;
162162
return;
163163
case "pipes":
164-
p.Style = "pipeDelimited";
164+
p.Style = ParameterStyle.PipeDelimited;
165165
return;
166166
case "tsv":
167167
throw new NotSupportedException();
168168
case "multi":
169-
p.Style = "form";
169+
p.Style = ParameterStyle.Form;
170170
p.Explode = true;
171171
return;
172172
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ internal static partial class OpenApiV3Deserializer
6666
{
6767
"style", (o, n) =>
6868
{
69-
o.Style = n.GetScalarValue();
69+
o.Style = n.GetScalarValue().GetEnumFromDisplayName<ParameterStyle>();
7070
}
7171
},
7272
{

src/Microsoft.OpenApi/Models/OpenApiParameter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public class OpenApiParameter : OpenApiElement, IOpenApiReference, IOpenApiExten
6767
/// Default values (based on value of in): for query - form; for path - simple; for header - simple;
6868
/// for cookie - form.
6969
/// </summary>
70-
public string Style { get; set; }
70+
public ParameterStyle? Style { get; set; }
7171

7272
/// <summary>
7373
/// When this is true, parameter values of type array or object generate separate parameters
@@ -163,7 +163,7 @@ internal override void WriteAsV3(IOpenApiWriter writer)
163163
writer.WriteBoolProperty(OpenApiConstants.AllowEmptyValue, AllowEmptyValue, false);
164164

165165
// style
166-
writer.WriteStringProperty(OpenApiConstants.Style, Style);
166+
writer.WriteStringProperty(OpenApiConstants.Style, Style?.GetDisplayName());
167167

168168
// explode
169169
writer.WriteBoolProperty(OpenApiConstants.Explode, Explode, false);

test/Microsoft.OpenApi.Readers.Tests/ParameterTests.cs

Lines changed: 60 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -102,16 +102,17 @@ private bool IsSimple(object value)
102102
}
103103

104104
[Theory]
105-
[InlineData("matrix", new[] {"a", "b"}, ";bar=a,b")]
106-
[InlineData("exploded-matrix", new[] {"a", "b"}, ";bar=a;bar=b")]
107-
[InlineData("label", new[] {"a", "b"}, ".a.b")]
108-
[InlineData("exploded-label", new[] {"a", "b"}, ".a.b")]
109-
public void SerializeArrays(string style, string[] value, string expected)
105+
[InlineData(ParameterStyle.Matrix, false, new[] {"a", "b"}, ";bar=a,b")]
106+
[InlineData(ParameterStyle.Matrix, true, new[] {"a", "b"}, ";bar=a;bar=b")]
107+
[InlineData(ParameterStyle.Label, false, new[] {"a", "b"}, ".a.b")]
108+
[InlineData(ParameterStyle.Label, true, new[] {"a", "b"}, ".a.b")]
109+
public void SerializeArrays(ParameterStyle style, bool explode, string[] value, string expected)
110110
{
111111
var parameter = new OpenApiParameter
112112
{
113113
Name = "bar",
114-
Style = style
114+
Style = style,
115+
Explode = explode
115116
};
116117

117118
var actual = SerializeParameterValue(parameter, value);
@@ -136,17 +137,18 @@ public void SerializeEscapedStrings(string value, string expected)
136137
// format="space-delimited" type="array" explode=true bar=a bar=b
137138

138139
[Theory]
139-
[InlineData("matrix", ";bar=a,1,b,2")]
140-
[InlineData("exploded-matrix", ";a=1;b=2")]
141-
[InlineData("label", ".a.1.b.2")]
142-
[InlineData("exploded-label", ".a=1.b=2")]
143-
public void SerializeMaps(string style, string expected)
140+
[InlineData(ParameterStyle.Matrix, false, ";bar=a,1,b,2")]
141+
[InlineData(ParameterStyle.Matrix, true, ";a=1;b=2")]
142+
[InlineData(ParameterStyle.Label, false, ".a.1.b.2")]
143+
[InlineData(ParameterStyle.Label, true, ".a=1.b=2")]
144+
public void SerializeMaps(ParameterStyle style, bool explode, string expected)
144145
{
145146
var value = new Dictionary<string, string> {{"a", "1"}, {"b", "2"}};
146147
var parameter = new OpenApiParameter
147148
{
148149
Name = "bar",
149-
Style = style
150+
Style = style,
151+
Explode = explode
150152
};
151153

152154
var actual = SerializeParameterValue(parameter, value);
@@ -161,43 +163,50 @@ private string SerializeParameterValue(OpenApiParameter parameter, object value)
161163

162164
switch (parameter.Style)
163165
{
164-
case "matrix": // Matrix
165-
output = SerializeValues(
166-
parameter.Name,
167-
false,
168-
parameter.AllowReserved,
169-
value,
170-
(n, v, m) => ";" + n + (string.IsNullOrEmpty(v) ? "" : "=") + v,
171-
",");
172-
break;
173-
case "exploded-matrix": // Matrix
174-
output = SerializeValues(
175-
parameter.Name,
176-
true,
177-
parameter.AllowReserved,
178-
value,
179-
(n, v, m) => ";" + n + (string.IsNullOrEmpty(v) ? "" : "=") + v,
180-
",");
181-
break;
182-
183-
case "label": // Label
184-
output = SerializeValues(
185-
parameter.Name,
186-
false,
187-
parameter.AllowReserved,
188-
value,
189-
(n, v, m) => "." + (m ? n + "=" : "") + v,
190-
".");
166+
case ParameterStyle.Matrix: // Matrix
167+
if (!parameter.Explode)
168+
{
169+
output = SerializeValues(
170+
parameter.Name,
171+
false,
172+
parameter.AllowReserved,
173+
value,
174+
(n, v, m) => ";" + n + (string.IsNullOrEmpty(v) ? "" : "=") + v,
175+
",");
176+
}
177+
else
178+
{
179+
output = SerializeValues(
180+
parameter.Name,
181+
true,
182+
parameter.AllowReserved,
183+
value,
184+
(n, v, m) => ";" + n + (string.IsNullOrEmpty(v) ? "" : "=") + v,
185+
",");
186+
}
191187
break;
192188

193-
case "exploded-label": // Label
194-
output = SerializeValues(
195-
parameter.Name,
196-
true,
197-
parameter.AllowReserved,
198-
value,
199-
(n, v, m) => "." + (m ? n + "=" : "") + v,
200-
".");
189+
case ParameterStyle.Label: // Label
190+
if (!parameter.Explode)
191+
{
192+
output = SerializeValues(
193+
parameter.Name,
194+
false,
195+
parameter.AllowReserved,
196+
value,
197+
(n, v, m) => "." + (m ? n + "=" : "") + v,
198+
".");
199+
}
200+
else
201+
{
202+
output = SerializeValues(
203+
parameter.Name,
204+
true,
205+
parameter.AllowReserved,
206+
value,
207+
(n, v, m) => "." + (m ? n + "=" : "") + v,
208+
".");
209+
}
201210
break;
202211

203212
default: // Simple
@@ -215,10 +224,10 @@ private string SerializeParameterValue(OpenApiParameter parameter, object value)
215224
}
216225

217226
[Theory]
218-
[InlineData("label", "yo", ".yo")]
219-
[InlineData("matrix", "x", ";foo=x")]
220-
[InlineData("matrix", "", ";foo")]
221-
public void SerializePrefixedStrings(string style, string value, string expected)
227+
[InlineData(ParameterStyle.Label, "yo", ".yo")]
228+
[InlineData(ParameterStyle.Matrix, "x", ";foo=x")]
229+
[InlineData(ParameterStyle.Matrix, "", ";foo")]
230+
public void SerializePrefixedStrings(ParameterStyle style, string value, string expected)
222231
{
223232
var parameter = new OpenApiParameter
224233
{

test/Microsoft.OpenApi.Tests/Models/OpenApiParameterTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public OpenApiParameterTests(ITestOutputHelper output)
3434
Required = true,
3535
Deprecated = false,
3636

37-
Style = "simple",
37+
Style = ParameterStyle.Simple,
3838
Explode = true,
3939
Schema = new OpenApiSchema
4040
{

0 commit comments

Comments
 (0)