@@ -18,7 +18,7 @@ namespace Microsoft.OpenApi
1818 /// - Serialization: To produce something functionally equivalent to boolean schemas, create an empty <see cref="OpenApiSchema"/>
1919 /// for "true" behavior, or create a schema with only <see cref="Not"/> set to an empty schema for "false" behavior.
2020 /// </summary>
21- public class OpenApiSchema : IOpenApiExtensible , IOpenApiSchema , IOpenApiSchemaWithUnevaluatedProperties , IMetadataContainer
21+ public class OpenApiSchema : IOpenApiExtensible , IOpenApiSchema , IOpenApiSchemaWithUnevaluatedProperties , IOpenApiSchemaWithContainsProperties , IMetadataContainer
2222 {
2323 /// <inheritdoc />
2424 public string ? Title { get ; set ; }
@@ -207,6 +207,15 @@ public string? Minimum
207207 /// <inheritdoc />
208208 public bool ? UniqueItems { get ; set ; }
209209
210+ /// <inheritdoc />
211+ public IOpenApiSchema ? Contains { get ; set ; }
212+
213+ /// <inheritdoc />
214+ public uint ? MaxContains { get ; set ; }
215+
216+ /// <inheritdoc />
217+ public uint ? MinContains { get ; set ; }
218+
210219 /// <inheritdoc />
211220 public IDictionary < string , IOpenApiSchema > ? Properties { get ; set ; }
212221
@@ -318,6 +327,12 @@ internal OpenApiSchema(IOpenApiSchema schema)
318327 MaxItems = schema . MaxItems ?? MaxItems ;
319328 MinItems = schema . MinItems ?? MinItems ;
320329 UniqueItems = schema . UniqueItems ?? UniqueItems ;
330+ if ( schema is IOpenApiSchemaWithContainsProperties containsSchema )
331+ {
332+ Contains = containsSchema . Contains ? . CreateShallowCopy ( ) ;
333+ MaxContains = containsSchema . MaxContains ?? MaxContains ;
334+ MinContains = containsSchema . MinContains ?? MinContains ;
335+ }
321336 Properties = schema . Properties != null ? new Dictionary < string , IOpenApiSchema > ( schema . Properties ) : null ;
322337 PatternProperties = schema . PatternProperties != null ? new Dictionary < string , IOpenApiSchema > ( schema . PatternProperties ) : null ;
323338 MaxProperties = schema . MaxProperties ?? MaxProperties ;
@@ -630,6 +645,15 @@ internal void WriteJsonSchemaKeywords(IOpenApiWriter writer)
630645 writer . WriteOptionalCollection ( OpenApiConstants . Examples , Examples , ( nodeWriter , s ) => nodeWriter . WriteAny ( s ) ) ;
631646 writer . WriteOptionalMap ( OpenApiConstants . PatternProperties , PatternProperties , ( w , s ) => s . SerializeAsV31 ( w ) ) ;
632647 writer . WriteOptionalMap ( OpenApiConstants . DependentRequired , DependentRequired , ( w , s ) => w . WriteValue ( s ) ) ;
648+
649+ // contains
650+ writer . WriteOptionalObject ( OpenApiConstants . Contains , Contains , ( w , s ) => s . SerializeAsV31 ( w ) ) ;
651+
652+ // maxContains
653+ writer . WriteProperty ( OpenApiConstants . MaxContains , MaxContains ) ;
654+
655+ // minContains
656+ writer . WriteProperty ( OpenApiConstants . MinContains , MinContains ) ;
633657 }
634658
635659 internal void WriteAsItemsProperties ( IOpenApiWriter writer )
0 commit comments