55 lines
1.7 KiB
C#
55 lines
1.7 KiB
C#
using Qrakhen.Qamp.Core.Values;
|
|
using System.Runtime.CompilerServices;
|
|
|
|
using V = Qrakhen.Qamp.Core.Values.ValueType;
|
|
|
|
namespace Qrakhen.Qamp.Core;
|
|
|
|
public static class Assert
|
|
{
|
|
public static void IsPrimitive(params Value[] values)
|
|
{
|
|
AssertAndThrow(() => values.All(value => value.Is(V.Primitive, false)), values);
|
|
}
|
|
|
|
public static void NotZero(params Value[] values)
|
|
{
|
|
AssertAndThrow(() => values.All(value => value.Signed != 0), values);
|
|
}
|
|
|
|
public static void IsInteger(params Value[] values)
|
|
{
|
|
AssertAndThrow(() => values.All(value => value.Is(V.Integer, false)), values);
|
|
}
|
|
|
|
public static void NotVoid(params Value[] values)
|
|
{
|
|
AssertAndThrow(() => values.All(value => value.Type != V.Void), values);
|
|
}
|
|
|
|
private static void AssertAndThrow(Func<bool> assertion, object? parameter, [CallerMemberName] string? method = "") =>
|
|
AssertAndThrow(assertion, [parameter], method);
|
|
|
|
private static void AssertAndThrow(
|
|
Func<bool> assertion,
|
|
object?[] parameters,
|
|
[CallerMemberName] string? method = "")
|
|
{
|
|
if (!assertion.Invoke())
|
|
throw new AssertionException(method ?? "", parameters);
|
|
}
|
|
|
|
public class AssertionException : Exception
|
|
{
|
|
public readonly string Assertion;
|
|
public readonly object?[] Parameters;
|
|
|
|
public AssertionException(string assertion, params object?[] parameters)
|
|
: base($"Assertion {assertion} failed for parameters:{Environment.NewLine}" +
|
|
$"{string.Join(Environment.NewLine, parameters.Select(p => $" - <{p?.GetType().Name ?? "null"}>{p?.ToString() ?? "null"}"))}")
|
|
{
|
|
Assertion = assertion;
|
|
Parameters = parameters;
|
|
}
|
|
}
|
|
} |