using Firebird2D.Logger; using System.Runtime.CompilerServices; namespace Firebird2D.Requirement { public class Require { public static void NotNull(object? input, string name, int loggerInstanceNumber, [CallerMemberName] string callerName = "", [CallerFilePath] string callerPath = "", [CallerLineNumber] int callerLineNumber = 0) { if (input == null) { LogAndThrow(loggerInstanceNumber, callerName, callerPath, callerLineNumber, $"{name} was null."); } } public static void NotEmpty(string input, string name, int loggerInstanceNumber, [CallerMemberName] string callerName = "", [CallerFilePath] string callerPath = "", [CallerLineNumber] int callerLineNumber = 0) { if (string.IsNullOrEmpty(input)) { LogAndThrow(loggerInstanceNumber, callerName, callerPath, callerLineNumber, $"{name} must not be null or empty."); } } public static void Range(int value, int min, int max, string name, int loggerInstanceNumber, [CallerMemberName] string callerName = "", [CallerFilePath] string callerPath = "", [CallerLineNumber] int callerLineNumber = 0) { if (value < min || value > max) { LogAndThrow(loggerInstanceNumber, callerName, callerPath, callerLineNumber, $"{name} must be in range [{min}, {max}], but was {value}."); } } public static void IsTrue(bool condition, string message, int loggerInstanceNumber, [CallerMemberName] string callerName = "", [CallerFilePath] string callerPath = "", [CallerLineNumber] int callerLineNumber = 0) { if (!condition) { LogAndThrow(loggerInstanceNumber, callerName, callerPath, callerLineNumber, message); } } private static void LogAndThrow(int loggerInstanceNumber, string callerName, string callerPath, int lineNumber, string message) { string fullMessage = $"{message} (at {callerName} in {callerPath}, line {lineNumber})"; GameLogger.GetInstance(loggerInstanceNumber).Log(callerName, LogType.Error, fullMessage); throw new ArgumentException(fullMessage); } } }