// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
<#@include file="TypeInfo.ttinclude" #>
using System.Diagnostics.CodeAnalysis;
namespace PerformanceFish.Utility.Diagnostics;
///
partial class Guard
{
///
partial class ThrowHelper
{
<#
GenerateTextForItems(EnumerableTypes, item =>
{
#>
///
/// Throws an when (or an overload) fails.
///
[DoesNotReturn]
public static void ThrowArgumentExceptionForIsEmpty(<#= item.Type #> <#= item.Name #>, string name)
{
throw new ArgumentException($"Parameter {AssertString(name)} ({typeof(<#= item.Type #>).ToTypeString()}) must be empty, had a size of {AssertString(<#= item.Name #>.<#= item.Size #>)}.", name);
}
///
/// Throws an when (or an overload) fails.
///
[DoesNotReturn]
public static void ThrowArgumentExceptionForHasSizeEqualTo(<#= item.Type #> <#= item.Name #>, int size, string name)
{
throw new ArgumentException($"Parameter {AssertString(name)} ({typeof(<#= item.Type #>).ToTypeString()}) must have a size equal to {size}, had a size of {AssertString(<#= item.Name #>.<#= item.Size #>)}.", name);
}
///
/// Throws an when (or an overload) fails.
///
[DoesNotReturn]
public static void ThrowArgumentExceptionForHasSizeNotEqualTo(<#= item.Type #> <#= item.Name #>, int size, string name)
{
throw new ArgumentException($"Parameter {AssertString(name)} ({typeof(<#= item.Type #>).ToTypeString()}) must have a size not equal to {size}, had a size of {AssertString(<#= item.Name #>.<#= item.Size #>)}.", name);
}
///
/// Throws an when (or an overload) fails.
///
[DoesNotReturn]
public static void ThrowArgumentExceptionForHasSizeGreaterThan(<#= item.Type #> <#= item.Name #>, int size, string name)
{
throw new ArgumentException($"Parameter {AssertString(name)} ({typeof(<#= item.Type #>).ToTypeString()}) must have a size over {size}, had a size of {AssertString(<#= item.Name #>.<#= item.Size #>)}.", name);
}
///
/// Throws an when (or an overload) fails.
///
[DoesNotReturn]
public static void ThrowArgumentExceptionForHasSizeGreaterThanOrEqualTo(<#= item.Type #> <#= item.Name #>, int size, string name)
{
throw new ArgumentException($"Parameter {AssertString(name)} ({typeof(<#= item.Type #>).ToTypeString()}) must have a size of at least {size}, had a size of {AssertString(<#= item.Name #>.<#= item.Size #>)}.", name);
}
///
/// Throws an when (or an overload) fails.
///
[DoesNotReturn]
public static void ThrowArgumentExceptionForHasSizeLessThan(<#= item.Type #> <#= item.Name #>, int size, string name)
{
throw new ArgumentException($"Parameter {AssertString(name)} ({typeof(<#= item.Type #>).ToTypeString()}) must have a size less than {size}, had a size of {AssertString(<#= item.Name #>.<#= item.Size #>)}.", name);
}
///
/// Throws an when (or an overload) fails.
///
[DoesNotReturn]
public static void ThrowArgumentExceptionForHasSizeLessThanOrEqualTo(<#= item.Type #> <#= item.Name #>, int size, string name)
{
throw new ArgumentException($"Parameter {AssertString(name)} ({typeof(<#= item.Type #>).ToTypeString()}) must have a size less than or equal to {size}, had a size of {AssertString(<#= item.Name #>.<#= item.Size #>)}.", name);
}
///
/// Throws an when (or an overload) fails.
///
[DoesNotReturn]
public static void ThrowArgumentExceptionForHasSizeEqualTo(<#= item.Type #> source, <#= item.DestinationType #> destination, string name)
{
throw new ArgumentException($"The source {AssertString(name)} ({typeof(<#= item.Type #>).ToTypeString()}) must have a size equal to {AssertString(destination.<#= item.Size #>)} (the destination), had a size of {AssertString(source.<#= item.Size #>)}.", name);
}
///
/// Throws an when (or an overload) fails.
///
[DoesNotReturn]
public static void ThrowArgumentExceptionForHasSizeLessThanOrEqualTo(<#= item.Type #> source, <#= item.DestinationType #> destination, string name)
{
throw new ArgumentException($"The source {AssertString(name)} ({typeof(<#= item.Type #>).ToTypeString()}) must have a size less than or equal to {AssertString(destination.<#= item.Size #>)} (the destination), had a size of {AssertString(source.<#= item.Size #>)}.", name);
}
///
/// Throws an when (or an overload) fails.
///
[DoesNotReturn]
public static void ThrowArgumentOutOfRangeExceptionForIsInRangeFor(int index, <#= item.Type #> <#= item.Name #>, string name)
{
throw new ArgumentOutOfRangeException(name, index, $"Parameter {AssertString(name)} (int) must be in the range given by <0> and {AssertString(<#= item.Name #>.<#= item.Size #>)} to be a valid index for the target collection ({typeof(<#= item.Type #>).ToTypeString()}), was {AssertString(index)}.");
}
///
/// Throws an when (or an overload) fails.
///
[DoesNotReturn]
public static void ThrowArgumentOutOfRangeExceptionForIsNotInRangeFor(int index, <#= item.Type #> <#= item.Name #>, string name)
{
throw new ArgumentOutOfRangeException(name, index, $"Parameter {AssertString(name)} (int) must not be in the range given by <0> and {AssertString(<#= item.Name #>.<#= item.Size #>)} to be an invalid index for the target collection ({typeof(<#= item.Type #>).ToTypeString()}), was {AssertString(index)}.");
}
<#
});
#>
}
}