using FluentValidation; using FluentValidation.Results; namespace Common.FluentValidation; public static class FluentValidationExtensions { // From: https://github.com/FluentValidation/FluentValidation/issues/1648 public static IRuleBuilderOptions SetNonNullableValidator( this IRuleBuilder ruleBuilder, IValidator validator, params string[] ruleSets) { var adapter = new NullableChildValidatorAdaptor(validator, validator.GetType()) { RuleSets = ruleSets }; return ruleBuilder.SetAsyncValidator(adapter); } public static IEnumerable IsValid( this IEnumerable source, TValidator validator, Action, TSource>? handleInvalid = null) where TValidator : IValidator, new() { foreach (var s in source) { var result = validator.Validate(s); if (result.IsValid) { yield return s; } else { handleInvalid?.Invoke(result.Errors, s); } } } }