/// <summary>
        /// Specifies that values must be in a given range.
        /// </summary>
        /// <param name="builder">The builder.</param>
        /// <param name="minimum">The minimum allowed value.</param>
        /// <param name="maximum">The maximum allowed value.</param>
        /// <param name="errorMessage">A custom error message to display.</param>
        /// <returns>The builder.</returns>
        public static IValidationBuilder <double> Range(this IValidationBuilder <double> builder, double minimum, double maximum, string errorMessage = null)
        {
            var attribute = GetValidationAttr <RangeAttribute>(errorMessage, new object[] { minimum, maximum });

            builder.Use(new AttributeValidator(attribute));
            return(builder);
        }
        /// <summary>
        /// Specifies that values must satisfy the requirements of the validation attribute of type <typeparamref name="TAttribute"/>.
        /// </summary>
        /// <typeparam name="TAttribute">The validation attribute type.</typeparam>
        /// <param name="builder">The builder.</param>
        /// <param name="ctorArgs">Constructor arguments for <typeparamref name="TAttribute"/>.</param>
        /// <param name="errorMessage">A custom error message to display.</param>
        /// <returns>The builder.</returns>
        public static IValidationBuilder Satisfies <TAttribute>(this IValidationBuilder builder, string errorMessage = null, params object[] ctorArgs)
            where TAttribute : ValidationAttribute
        {
            var attribute = GetValidationAttr <TAttribute>(errorMessage, ctorArgs);

            builder.Use(new AttributeValidator(attribute));
            return(builder);
        }
#pragma warning disable RS0026 // Do not add multiple public overloads with optional parameters
        /// <summary>
        /// Specifies that values must be in a given range.
        /// </summary>
        /// <param name="builder">The builder.</param>
        /// <param name="minimum">The minimum allowed value.</param>
        /// <param name="maximum">The maximum allowed value.</param>
        /// <param name="errorMessage">A custom error message to display.</param>
        /// <returns>The builder.</returns>
        public static IValidationBuilder <double> Range(this IValidationBuilder <double> builder, double minimum, double maximum, string?errorMessage = null)
#pragma warning restore RS0026 // Do not add multiple public overloads with optional parameters
        {
            var attribute = GetValidationAttr <RangeAttribute>(errorMessage, new object[] { minimum, maximum });

            builder.Use(new AttributeValidator(attribute));
            return(builder);
        }
#pragma warning disable RS0026 // Do not add multiple public overloads with optional parameters
        /// <summary>
        /// Specifies that values must be in a given range.
        /// </summary>
        /// <param name="builder">The builder.</param>
        /// <param name="minimum">The minimum allowed value.</param>
        /// <param name="maximum">The maximum allowed value.</param>
        /// <param name="errorMessage">A custom error message to display.</param>
        /// <returns>The builder.</returns>
        public static IValidationBuilder <int> Range(this IValidationBuilder <int> builder, int minimum, int maximum, string?errorMessage = null)
#pragma warning restore RS0026 // Do not add multiple public overloads with optional parameters
        {
            var attribute = AddErrorMessage(new RangeAttribute(minimum, maximum), errorMessage);

            builder.Use(new AttributeValidator(attribute));
            return(builder);
        }
 private static IValidationBuilder Satisfies(this IValidationBuilder builder, ValidationAttribute attribute, string?errorMessage = null)
 {
     if (errorMessage is not null)
     {
         attribute.ErrorMessage = errorMessage;
     }
     builder.Use(new AttributeValidator(attribute));
     return(builder);
 }