Files
Firebird_2D/Firebird2D.Requirement/Require.cs
T
2025-04-22 20:19:35 +02:00

65 lines
2.4 KiB
C#

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);
}
}
}