diff --git a/Directory.Build.props b/Directory.Build.props index ea0f8f3..9d0b92b 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,6 +1,6 @@ - 3.15.0 + 3.16.0 diff --git a/JustArchiNET.Madness/ArgumentExceptionMadness/ArgumentException.cs b/JustArchiNET.Madness/ArgumentExceptionMadness/ArgumentException.cs index e2dee3d..2fd0ef4 100644 --- a/JustArchiNET.Madness/ArgumentExceptionMadness/ArgumentException.cs +++ b/JustArchiNET.Madness/ArgumentExceptionMadness/ArgumentException.cs @@ -30,10 +30,10 @@ namespace JustArchiNET.Madness.ArgumentExceptionMadness; [PublicAPI] public class ArgumentException : System.ArgumentException { [MadnessType(EMadnessType.Proxy)] - public ArgumentException(string message, string paramName) : base(message, paramName) { } + public ArgumentException(string message, [InvokerParameterName] string paramName) : base(message, paramName) { } [MadnessType(EMadnessType.Proxy)] - public ArgumentException(string message, string paramName, Exception innerException) : base(message, paramName, innerException) { } + public ArgumentException(string message, [InvokerParameterName] string paramName, Exception innerException) : base(message, paramName, innerException) { } [MadnessType(EMadnessType.Proxy)] public ArgumentException(string message, Exception innerException) : base(message, innerException) { } @@ -52,7 +52,7 @@ public static void ThrowIfNullOrEmpty( [System.Diagnostics.CodeAnalysis.NotNull] #endif - string? argument, string? paramName = null + string? argument, [InvokerParameterName] string? paramName = null ) { if (string.IsNullOrEmpty(argument)) { ArgumentNullExceptionMadness.ArgumentNullException.ThrowIfNull(argument, paramName); diff --git a/JustArchiNET.Madness/ArgumentNullExceptionMadness/ArgumentNullException.cs b/JustArchiNET.Madness/ArgumentNullExceptionMadness/ArgumentNullException.cs index 619e115..987bf70 100644 --- a/JustArchiNET.Madness/ArgumentNullExceptionMadness/ArgumentNullException.cs +++ b/JustArchiNET.Madness/ArgumentNullExceptionMadness/ArgumentNullException.cs @@ -46,7 +46,7 @@ public static void ThrowIfNull( [System.Diagnostics.CodeAnalysis.NotNull] #endif - T? argument, string? paramName = null + T? argument, [InvokerParameterName] string? paramName = null ) { if (argument is null) { throw new ArgumentNullException(paramName ?? typeof(T).ToString()); @@ -61,7 +61,7 @@ public static void ThrowIfNull( [System.Diagnostics.CodeAnalysis.NotNull] #endif - object? argument, string? paramName = null + object? argument, [InvokerParameterName] string? paramName = null ) { if (argument is not null) { return; diff --git a/JustArchiNET.Madness/ArgumentOutOfRangeExceptionMadness/ArgumentOutOfRangeException.cs b/JustArchiNET.Madness/ArgumentOutOfRangeExceptionMadness/ArgumentOutOfRangeException.cs new file mode 100644 index 0000000..a3c83e2 --- /dev/null +++ b/JustArchiNET.Madness/ArgumentOutOfRangeExceptionMadness/ArgumentOutOfRangeException.cs @@ -0,0 +1,78 @@ +// _ __ __ +// ___ ___ ___ _ __ __| | __ _ | \/ | +// / __|/ __| / _ \| '_ \ / _` | / _` || |\/| | +// \__ \\__ \| __/| | | || (_| || (_| || | | | +// |___/|___/ \___||_| |_| \__,_| \__,_||_| |_| +// | +// Copyright 2021-2023 Ɓukasz "JustArchi" Domeradzki +// Contact: JustArchi@JustArchi.net +// | +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// | +// http://www.apache.org/licenses/LICENSE-2.0 +// | +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using System; +using System.Collections.Generic; +using JetBrains.Annotations; +using JustArchiNET.Madness.Helpers; + +namespace JustArchiNET.Madness.ArgumentOutOfRangeExceptionMadness; + +[MadnessType(EMadnessType.Replacement)] +[PublicAPI] +public class ArgumentOutOfRangeException : System.ArgumentOutOfRangeException { + [MadnessType(EMadnessType.Proxy)] + public ArgumentOutOfRangeException([InvokerParameterName] string paramName, string message) : base(paramName, message) { } + + [MadnessType(EMadnessType.Proxy)] + public ArgumentOutOfRangeException(string message, Exception innerException) : base(message, innerException) { } + + [MadnessType(EMadnessType.Proxy)] + public ArgumentOutOfRangeException([InvokerParameterName] string paramName) : base(paramName) { } + + [MadnessType(EMadnessType.Proxy)] + public ArgumentOutOfRangeException() { } + + [MadnessType(EMadnessType.Implementation)] + public static void ThrowIfEqual(T value, T other, [InvokerParameterName] string? paramName = null) where T : IEquatable? { + if (EqualityComparer.Default.Equals(value, other)) { + throw new ArgumentOutOfRangeException(paramName ?? typeof(T).ToString()); + } + } + + [MadnessType(EMadnessType.Implementation)] + public static void ThrowIfLessThan(T value, T other, [InvokerParameterName] string? paramName = null) where T : IComparable { + if (value.CompareTo(other) < 0) { + throw new ArgumentOutOfRangeException(paramName ?? typeof(T).ToString()); + } + } + + [MadnessType(EMadnessType.Implementation)] + public static void ThrowIfNegative(T value, [InvokerParameterName] string? paramName = null) { + if (value is < 0) { + throw new ArgumentOutOfRangeException(paramName ?? typeof(T).ToString()); + } + } + + [MadnessType(EMadnessType.Implementation)] + public static void ThrowIfNegativeOrZero(T value, [InvokerParameterName] string? paramName = null) { + if (value is <= 0) { + throw new ArgumentOutOfRangeException(paramName ?? typeof(T).ToString()); + } + } + + [MadnessType(EMadnessType.Implementation)] + public static void ThrowIfZero(T value, [InvokerParameterName] string? paramName = null) { + if (value is 0) { + throw new ArgumentOutOfRangeException(paramName ?? typeof(T).ToString()); + } + } +} diff --git a/README.md b/README.md index ad60917..820d0df 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,7 @@ Example: +