/* * Copyright (c) 2024 Vaughn Nugent * * Library: VNLib * Package: VNLib.Plugins.Extensions.Loading * File: Validate.cs * * Validate.cs is part of VNLib.Plugins.Extensions.Loading which is part of the larger * VNLib collection of libraries and utilities. * * VNLib.Plugins.Extensions.Loading 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.Loading 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 System.Runtime.CompilerServices; using VNLib.Utils.IO; namespace VNLib.Plugins.Extensions.Loading.Configuration { /// /// A class that allows for easy configuration validation /// public sealed class Validate { /// /// Ensures the object is not null and not an empty string, /// otherwise a is raised /// /// /// The object to test /// The message to display to the user on loading /// [DoesNotReturn] public static void NotNull(T? obj, string message) where T : class { if (obj is null) { throw new ConfigurationValidationException(message); } if (obj is string s && string.IsNullOrWhiteSpace(s)) { throw new ConfigurationValidationException(message); } } /// /// /// /// /// /// public static void Assert([DoesNotReturnIf(false)] bool condition, string message) { if (!condition) { throw new ConfigurationValidationException(message); } } public static void NotEqual(T a, T b, string message) { if (a is null || b is null) { throw new ConfigurationValidationException(message); } if (a.Equals(b)) { throw new ConfigurationValidationException(message); } } public static void Range2(T value, T min, T max, string message) where T : IComparable { //Compare the value against min/max calues and raise exception if it is if (value.CompareTo(min) < 0 || value.CompareTo(max) > 0) { throw new ConfigurationValidationException(message); } } public static void Range(T value, T min, T max, [CallerArgumentExpression(nameof(value))] string? paramName = null) where T : IComparable { Range2(value, min, max, $"Value for {paramName} must be between {min} and {max}. Value: {value}"); } public static void FileExists(string path) { if (!FileOperations.FileExists(path)) { throw new ConfigurationValidationException($"Required file: {path} not found"); } } } }