Skip to content

Commit 3669c56

Browse files
authored
Merge pull request #245 from Meir017/fix/open-api-schema-required-property
Changed OpenApiSchema.Required to ISet
2 parents faf76e4 + 839e43e commit 3669c56

File tree

12 files changed

+37
-35
lines changed

12 files changed

+37
-35
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ private static OpenApiRequestBody CreateFormBody(ParsingContext context, List<Op
160160
schema.Description = v.Description;
161161
return schema;
162162
}),
163-
Required = formParameters.Where(p => p.Required).Select(p => p.Name).ToList()
163+
Required = new HashSet<string>(formParameters.Where(p => p.Required).Select(p => p.Name))
164164
}
165165
};
166166

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Microsoft.OpenApi.Extensions;
66
using Microsoft.OpenApi.Models;
77
using Microsoft.OpenApi.Readers.ParseNodes;
8+
using System.Collections.Generic;
89

910
namespace Microsoft.OpenApi.Readers.V2
1011
{
@@ -103,7 +104,7 @@ internal static partial class OpenApiV2Deserializer
103104
{
104105
"required", (o, n) =>
105106
{
106-
o.Required = n.CreateSimpleList(n2 => n2.GetScalarValue()).ToArray();
107+
o.Required = new HashSet<string>(n.CreateSimpleList(n2 => n2.GetScalarValue()));
107108
}
108109
},
109110
{

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Microsoft.OpenApi.Extensions;
66
using Microsoft.OpenApi.Models;
77
using Microsoft.OpenApi.Readers.ParseNodes;
8+
using System.Collections.Generic;
89

910
namespace Microsoft.OpenApi.Readers.V3
1011
{
@@ -103,7 +104,7 @@ internal static partial class OpenApiV3Deserializer
103104
{
104105
"required", (o, n) =>
105106
{
106-
o.Required = n.CreateSimpleList(n2 => n2.GetScalarValue()).ToArray();
107+
o.Required = new HashSet<string>(n.CreateSimpleList(n2 => n2.GetScalarValue()));
107108
}
108109
},
109110
{

src/Microsoft.OpenApi/Models/OpenApiSchema.cs

+7-7
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ public class OpenApiSchema : IOpenApiSerializable, IOpenApiReferenceable, IOpenA
133133
/// <summary>
134134
/// Follow JSON Schema definition: https://tools.ietf.org/html/draft-fge-json-schema-validation-00
135135
/// </summary>
136-
public IList<string> Required { get; set; } = new List<string>();
136+
public ISet<string> Required { get; set; } = new HashSet<string>();
137137

138138
/// <summary>
139139
/// Follow JSON Schema definition: https://tools.ietf.org/html/draft-fge-json-schema-validation-00
@@ -393,7 +393,7 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer)
393393
/// </summary>
394394
public void SerializeAsV2(IOpenApiWriter writer)
395395
{
396-
SerializeAsV2(writer: writer, parentRequiredProperties: new List<string>(), propertyName: null);
396+
SerializeAsV2(writer: writer, parentRequiredProperties: new HashSet<string>(), propertyName: null);
397397
}
398398

399399
/// <summary>
@@ -403,7 +403,7 @@ public void SerializeAsV2WithoutReference(IOpenApiWriter writer)
403403
{
404404
SerializeAsV2WithoutReference(
405405
writer: writer,
406-
parentRequiredProperties: new List<string>(),
406+
parentRequiredProperties: new HashSet<string>(),
407407
propertyName: null);
408408
}
409409

@@ -416,7 +416,7 @@ public void SerializeAsV2WithoutReference(IOpenApiWriter writer)
416416
/// <param name="propertyName">The property name that will be serialized.</param>
417417
internal void SerializeAsV2(
418418
IOpenApiWriter writer,
419-
IList<string> parentRequiredProperties,
419+
ISet<string> parentRequiredProperties,
420420
string propertyName)
421421
{
422422
if (writer == null)
@@ -432,7 +432,7 @@ internal void SerializeAsV2(
432432

433433
if (parentRequiredProperties == null)
434434
{
435-
parentRequiredProperties = new List<string>();
435+
parentRequiredProperties = new HashSet<string>();
436436
}
437437

438438
SerializeAsV2WithoutReference(writer, parentRequiredProperties, propertyName);
@@ -447,7 +447,7 @@ internal void SerializeAsV2(
447447
/// <param name="propertyName">The property name that will be serialized.</param>
448448
internal void SerializeAsV2WithoutReference(
449449
IOpenApiWriter writer,
450-
IList<string> parentRequiredProperties,
450+
ISet<string> parentRequiredProperties,
451451
string propertyName)
452452
{
453453
writer.WriteStartObject();
@@ -521,7 +521,7 @@ internal void WriteAsItemsProperties(IOpenApiWriter writer)
521521

522522
internal void WriteAsSchemaProperties(
523523
IOpenApiWriter writer,
524-
IList<string> parentRequiredProperties,
524+
ISet<string> parentRequiredProperties,
525525
string propertyName)
526526
{
527527
if (writer == null)

src/Microsoft.OpenApi/Writers/OpenApiWriterExtensions.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ public static void WriteRequiredObject<T>(
171171
public static void WriteOptionalCollection(
172172
this IOpenApiWriter writer,
173173
string name,
174-
IList<string> elements,
174+
IEnumerable<string> elements,
175175
Action<IOpenApiWriter, string> action)
176176
{
177177
if (elements != null && elements.Any())
@@ -191,7 +191,7 @@ public static void WriteOptionalCollection(
191191
public static void WriteOptionalCollection<T>(
192192
this IOpenApiWriter writer,
193193
string name,
194-
IList<T> elements,
194+
IEnumerable<T> elements,
195195
Action<IOpenApiWriter, T> action)
196196
where T : IOpenApiElement
197197
{

test/Microsoft.OpenApi.Readers.Tests/ReferenceService/TryLoadReferenceV2Tests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ public void LoadResponseAndSchemaReference()
226226
Schema = new OpenApiSchema
227227
{
228228
Description = "Sample description",
229-
Required = new List<string> {"name" },
229+
Required = new HashSet<string> {"name" },
230230
Properties = {
231231
["name"] = new OpenApiSchema()
232232
{

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public class OpenApiOperationTests
9292
Type = "string"
9393
}
9494
},
95-
Required = new List<string>
95+
Required = new HashSet<string>
9696
{
9797
"name"
9898
}
@@ -115,7 +115,7 @@ public class OpenApiOperationTests
115115
Type = "string"
116116
}
117117
},
118-
Required = new List<string>
118+
Required = new HashSet<string>
119119
{
120120
"name"
121121
}

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

+4-4
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public class OpenApiPathItemTests
8181
Type = "string"
8282
}
8383
},
84-
Required = new List<string>
84+
Required = new HashSet<string>
8585
{
8686
"name"
8787
}
@@ -104,7 +104,7 @@ public class OpenApiPathItemTests
104104
Type = "string"
105105
}
106106
},
107-
Required = new List<string>
107+
Required = new HashSet<string>
108108
{
109109
"name"
110110
}
@@ -190,7 +190,7 @@ public class OpenApiPathItemTests
190190
Type = "string"
191191
}
192192
},
193-
Required = new List<string>
193+
Required = new HashSet<string>
194194
{
195195
"name"
196196
}
@@ -218,7 +218,7 @@ public class OpenApiPathItemTests
218218
Type = "string"
219219
}
220220
},
221-
Required = new List<string>
221+
Required = new HashSet<string>
222222
{
223223
"name"
224224
}

test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs

+6-6
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ public void ParseStandardPetStoreDocumentShouldSucceed()
153153
["pet"] = new OpenApiSchema
154154
{
155155
Type = "object",
156-
Required = new List<string>
156+
Required = new HashSet<string>
157157
{
158158
"id",
159159
"name"
@@ -183,7 +183,7 @@ public void ParseStandardPetStoreDocumentShouldSucceed()
183183
["newPet"] = new OpenApiSchema
184184
{
185185
Type = "object",
186-
Required = new List<string>
186+
Required = new HashSet<string>
187187
{
188188
"name"
189189
},
@@ -212,7 +212,7 @@ public void ParseStandardPetStoreDocumentShouldSucceed()
212212
["errorModel"] = new OpenApiSchema
213213
{
214214
Type = "object",
215-
Required = new List<string>
215+
Required = new HashSet<string>
216216
{
217217
"code",
218218
"message"
@@ -580,7 +580,7 @@ public void ParseModifiedPetStoreDocumentWithTagAndSecurityShouldSucceed()
580580
["pet"] = new OpenApiSchema
581581
{
582582
Type = "object",
583-
Required = new List<string>
583+
Required = new HashSet<string>
584584
{
585585
"id",
586586
"name"
@@ -610,7 +610,7 @@ public void ParseModifiedPetStoreDocumentWithTagAndSecurityShouldSucceed()
610610
["newPet"] = new OpenApiSchema
611611
{
612612
Type = "object",
613-
Required = new List<string>
613+
Required = new HashSet<string>
614614
{
615615
"name"
616616
},
@@ -639,7 +639,7 @@ public void ParseModifiedPetStoreDocumentWithTagAndSecurityShouldSucceed()
639639
["errorModel"] = new OpenApiSchema
640640
{
641641
Type = "object",
642-
Required = new List<string>
642+
Required = new HashSet<string>
643643
{
644644
"code",
645645
"message"

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

+6-6
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ public class OpenApiDocumentTests
125125
["pet"] = new OpenApiSchema
126126
{
127127
Type = "object",
128-
Required = new List<string>
128+
Required = new HashSet<string>
129129
{
130130
"id",
131131
"name"
@@ -155,7 +155,7 @@ public class OpenApiDocumentTests
155155
["newPet"] = new OpenApiSchema
156156
{
157157
Type = "object",
158-
Required = new List<string>
158+
Required = new HashSet<string>
159159
{
160160
"name"
161161
},
@@ -184,7 +184,7 @@ public class OpenApiDocumentTests
184184
["errorModel"] = new OpenApiSchema
185185
{
186186
Type = "object",
187-
Required = new List<string>
187+
Required = new HashSet<string>
188188
{
189189
"code",
190190
"message"
@@ -516,7 +516,7 @@ public class OpenApiDocumentTests
516516
["pet"] = new OpenApiSchema
517517
{
518518
Type = "object",
519-
Required = new List<string>
519+
Required = new HashSet<string>
520520
{
521521
"id",
522522
"name"
@@ -541,7 +541,7 @@ public class OpenApiDocumentTests
541541
["newPet"] = new OpenApiSchema
542542
{
543543
Type = "object",
544-
Required = new List<string>
544+
Required = new HashSet<string>
545545
{
546546
"name"
547547
},
@@ -565,7 +565,7 @@ public class OpenApiDocumentTests
565565
["errorModel"] = new OpenApiSchema
566566
{
567567
Type = "object",
568-
Required = new List<string>
568+
Required = new HashSet<string>
569569
{
570570
"code",
571571
"message"

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ [new OpenApiSecurityScheme
251251
Type = "string"
252252
}
253253
},
254-
Required = new List<string>()
254+
Required = new HashSet<string>()
255255
{
256256
"name"
257257
}
@@ -274,7 +274,7 @@ [new OpenApiSecurityScheme
274274
Type = "string"
275275
}
276276
},
277-
Required = new List<string>()
277+
Required = new HashSet<string>()
278278
{
279279
"name"
280280
}

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -163,12 +163,12 @@ public class OpenApiSchemaTests
163163
public static OpenApiSchema AdvancedSchemaWithRequiredPropertiesObject = new OpenApiSchema
164164
{
165165
Title = "title1",
166-
Required = new List<string>(){ "property1" },
166+
Required = new HashSet<string>(){ "property1" },
167167
Properties = new Dictionary<string, OpenApiSchema>
168168
{
169169
["property1"] = new OpenApiSchema
170170
{
171-
Required = new List<string>() { "property3" },
171+
Required = new HashSet<string>() { "property3" },
172172
Properties = new Dictionary<string, OpenApiSchema>
173173
{
174174
["property2"] = new OpenApiSchema

0 commit comments

Comments
 (0)