Skip to content

Commit f5811e9

Browse files
committed
Add support for pattern properties
1 parent 6f28adf commit f5811e9

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

src/Microsoft.OpenApi/Models/OpenApiSchema.cs

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

44
using System;
@@ -227,6 +227,15 @@ public class OpenApiSchema : IOpenApiExtensible, IOpenApiReferenceable, IOpenApi
227227
/// </summary>
228228
public IDictionary<string, OpenApiSchema> Properties { get; set; } = new Dictionary<string, OpenApiSchema>();
229229

230+
/// <summary>
231+
/// Follow JSON Schema definition: https://tools.ietf.org/html/draft-fge-json-schema-validation-00
232+
/// PatternProperty definitions MUST be a Schema Object and not a standard JSON Schema (inline or referenced)
233+
/// Each property name of this object SHOULD be a valid regular expression according to the ECMA 262 r
234+
/// egular expression dialect. Each property value of this object MUST be an object, and each object MUST
235+
/// be a valid Schema Object not a standard JSON Schema.
236+
/// </summary>
237+
public IDictionary<string, OpenApiSchema> PatternProperties { get; set; } = new Dictionary<string, OpenApiSchema>();
238+
230239
/// <summary>
231240
/// Follow JSON Schema definition: https://tools.ietf.org/html/draft-fge-json-schema-validation-00
232241
/// </summary>
@@ -356,11 +365,12 @@ public OpenApiSchema(OpenApiSchema schema)
356365
MinItems = schema?.MinItems ?? MinItems;
357366
UniqueItems = schema?.UniqueItems ?? UniqueItems;
358367
Properties = schema?.Properties != null ? new Dictionary<string, OpenApiSchema>(schema.Properties) : null;
368+
PatternProperties = schema?.PatternProperties != null ? new Dictionary<string, OpenApiSchema>(schema.PatternProperties) : null;
359369
MaxProperties = schema?.MaxProperties ?? MaxProperties;
360370
MinProperties = schema?.MinProperties ?? MinProperties;
361371
AdditionalPropertiesAllowed = schema?.AdditionalPropertiesAllowed ?? AdditionalPropertiesAllowed;
362372
AdditionalProperties = schema?.AdditionalProperties != null ? new(schema?.AdditionalProperties) : null;
363-
Discriminator = schema?.Discriminator != null ? new(schema?.Discriminator) : null;
373+
Discriminator = schema?.Discriminator != null ? new(schema?.Discriminator) : null;
364374
Example = schema?.Example != null ? new(schema?.Example.Node) : null;
365375
Enum = schema?.Enum != null ? new List<JsonNode>(schema.Enum) : null;
366376
Nullable = schema?.Nullable ?? Nullable;
@@ -587,6 +597,7 @@ internal void WriteV31Properties(IOpenApiWriter writer)
587597
writer.WriteProperty(OpenApiConstants.V31ExclusiveMaximum, V31ExclusiveMaximum);
588598
writer.WriteProperty(OpenApiConstants.V31ExclusiveMinimum, V31ExclusiveMinimum);
589599
writer.WriteProperty(OpenApiConstants.UnevaluatedProperties, UnevaluatedProperties, false);
600+
writer.WriteOptionalMap(OpenApiConstants.PatternProperties, PatternProperties, (w, s) => s.SerializeAsV31(w));
590601
}
591602

592603
/// <summary>

src/Microsoft.OpenApi/Reader/V31/OpenApiSchemaDeserializer.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,10 @@ internal static partial class OpenApiV31Deserializer
150150
"properties",
151151
(o, n, t) => o.Properties = n.CreateMap(LoadOpenApiSchema, t)
152152
},
153+
{
154+
"patternProperties",
155+
(o, n, t) => o.PatternProperties = n.CreateMap(LoadOpenApiSchema, t)
156+
},
153157
{
154158
"additionalProperties", (o, n, _) =>
155159
{

0 commit comments

Comments
 (0)