src/Azure.Deployments.Extensibility.Core/V2/Validation/PropertyRuleBuilderExtensions.cs (43 lines of code) (raw):

// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. using Azure.Deployments.Extensibility.Core.V2.Validation.Criteria; using Azure.Deployments.Extensibility.Core.V2.Validation.Rules; using Json.Schema; using System.Text.Json; using System.Text.Json.Nodes; using System.Text.RegularExpressions; namespace Azure.Deployments.Extensibility.Core.V2.Validation { public static class PropertyRuleBuilderExtensions { public static PropertyRuleCriterionBuilder<TModel, string?> MustMatchRegex<TModel>(this IPropertyRuleBuilder<TModel, string?> builder, Regex regex) { var criterion = new MatchRegexCriterion<TModel>(regex); builder.AddCriterion(criterion); return new(builder, criterion); } public static PropertyRuleCriterionBuilder<TModel, TProperty> MustNotBeNull<TModel, TProperty>(this IPropertyRuleBuilder<TModel, TProperty> builder) { var criterion = new NotBeNullCriterion<TModel, TProperty>(); builder.AddCriterion(criterion); return new(builder, criterion); } public static PropertyRuleCriterionBuilder<TModel, TJsonNode?> MustMatchJsonSchema<TModel, TJsonNode>( this IPropertyRuleBuilder<TModel, TJsonNode?> builder, JsonSchema schema, SpecVersion schemaSpecVersion = SpecVersion.Draft7) where TJsonNode : JsonNode { var criterion = new MatchJsonSchemaCriterion<TModel>(_ => schema, schemaSpecVersion); builder.AddCriterion(criterion); return new(builder, criterion); } public static PropertyRuleCriterionBuilder<TModel, JsonElement> MustMatchJsonSchema<TModel>( this IPropertyRuleBuilder<TModel, JsonElement> builder, JsonSchemaResolver<TModel> schemaResolver, SpecVersion schemaSpecVersion = SpecVersion.Draft7) { var criterion = new MatchJsonSchemaCriterion<TModel>(schemaResolver, schemaSpecVersion); builder.AddCriterion(criterion); return new(builder, criterion); } } }