using System;
using System.Text.RegularExpressions;
namespace Unity.VisualScripting
{
public partial class EnsureThat
{
public void IsNotNullOrWhiteSpace(string value)
{
if (!Ensure.IsActive)
{
return;
}
IsNotNull(value);
if (StringUtility.IsNullOrWhiteSpace(value))
{
throw new ArgumentException(ExceptionMessages.Strings_IsNotNullOrWhiteSpace_Failed, paramName);
}
}
public void IsNotNullOrEmpty(string value)
{
if (!Ensure.IsActive)
{
return;
}
IsNotNull(value);
if (string.IsNullOrEmpty(value))
{
throw new ArgumentException(ExceptionMessages.Strings_IsNotNullOrEmpty_Failed, paramName);
}
}
public void IsNotNull(string value)
{
if (!Ensure.IsActive)
{
return;
}
if (value == null)
{
throw new ArgumentNullException(paramName, ExceptionMessages.Common_IsNotNull_Failed);
}
}
public void IsNotEmpty(string value)
{
if (!Ensure.IsActive)
{
return;
}
if (string.Empty.Equals(value))
{
throw new ArgumentException(ExceptionMessages.Strings_IsNotEmpty_Failed, paramName);
}
}
public void HasLengthBetween(string value, int minLength, int maxLength)
{
if (!Ensure.IsActive)
{
return;
}
IsNotNull(value);
var length = value.Length;
if (length < minLength)
{
throw new ArgumentException(ExceptionMessages.Strings_HasLengthBetween_Failed_ToShort.Inject(minLength, maxLength, length), paramName);
}
if (length > maxLength)
{
throw new ArgumentException(ExceptionMessages.Strings_HasLengthBetween_Failed_ToLong.Inject(minLength, maxLength, length), paramName);
}
}
public void Matches(string value, string match) => Matches(value, new Regex(match));
public void Matches(string value, Regex match)
{
if (!Ensure.IsActive)
{
return;
}
if (!match.IsMatch(value))
{
throw new ArgumentException(ExceptionMessages.Strings_Matches_Failed.Inject(value, match), paramName);
}
}
public void SizeIs(string value, int expected)
{
if (!Ensure.IsActive)
{
return;
}
IsNotNull(value);
if (value.Length != expected)
{
throw new ArgumentException(ExceptionMessages.Strings_SizeIs_Failed.Inject(expected, value.Length), paramName);
}
}
public void IsEqualTo(string value, string expected)
{
if (!Ensure.IsActive)
{
return;
}
if (!StringEquals(value, expected))
{
throw new ArgumentException(ExceptionMessages.Strings_IsEqualTo_Failed.Inject(value, expected), paramName);
}
}
public void IsEqualTo(string value, string expected, StringComparison comparison)
{
if (!Ensure.IsActive)
{
return;
}
if (!StringEquals(value, expected, comparison))
{
throw new ArgumentException(ExceptionMessages.Strings_IsEqualTo_Failed.Inject(value, expected), paramName);
}
}
public void IsNotEqualTo(string value, string expected)
{
if (!Ensure.IsActive)
{
return;
}
if (StringEquals(value, expected))
{
throw new ArgumentException(ExceptionMessages.Strings_IsNotEqualTo_Failed.Inject(value, expected), paramName);
}
}
public void IsNotEqualTo(string value, string expected, StringComparison comparison)
{
if (!Ensure.IsActive)
{
return;
}
if (StringEquals(value, expected, comparison))
{
throw new ArgumentException(ExceptionMessages.Strings_IsNotEqualTo_Failed.Inject(value, expected), paramName);
}
}
public void IsGuid(string value)
{
if (!Ensure.IsActive)
{
return;
}
if (!StringUtility.IsGuid(value))
{
throw new ArgumentException(ExceptionMessages.Strings_IsGuid_Failed.Inject(value), paramName);
}
}
private bool StringEquals(string x, string y, StringComparison? comparison = null)
{
return comparison.HasValue
? string.Equals(x, y, comparison.Value)
: string.Equals(x, y);
}
}
}