/*
* Copyright (c) 2023 Vaughn Nugent
*
* Library: VNLib
* Package: VNLib.Plugins.Extensions.Validation
* File: ValidationExtensions.cs
*
* ValidationExtensions.cs is part of VNLib.Plugins.Extensions.Validation which is part of the larger
* VNLib collection of libraries and utilities.
*
* VNLib.Plugins.Extensions.Validation is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* VNLib.Plugins.Extensions.Validation is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see https://www.gnu.org/licenses/.
*/
using System;
using System.Diagnostics.CodeAnalysis;
using FluentValidation;
using FluentValidation.Results;
namespace VNLib.Plugins.Extensions.Validation
{
///
/// Provides shortcut methods to aid programmatic validation of objects
///
public static class ValidationExtensions
{
///
/// If evaluates to false, sets the specified assertion message
/// to the to the specified string
///
///
/// The result of the assertion
/// The error message to store when the value is false
/// The inverse of
public static bool Assert(this WebMessage webm, [DoesNotReturnIf(false)] bool assertion, string message)
{
if(!assertion)
{
webm.Success = false;
webm.Result = message;
}
return !assertion;
}
///
/// Validates the specified instance, and stores errors to the specified
///
/// The instance to validate
///
/// The to store errors to
/// True if the result of the validation is valid, false otherwise and the is not modified
public static bool Validate(this IValidator validator, T instance, ValErrWebMessage webMessage)
{
//Validate value
ValidationResult result = validator.Validate(instance);
//If not valid, set errors on web message
if (!result.IsValid)
{
webMessage.Success = false;
webMessage.Errors = result.GetErrorsAsCollection();
}
return result.IsValid;
}
}
}