Files
MaybeError/MaybeError/MaybeExtensions.cs
Amatsugu 77396d252e
All checks were successful
.NET / build (push) Successful in 34s
Added Map and MapError
2025-08-18 10:23:36 -04:00

103 lines
2.8 KiB
C#

using MaybeError.Errors;
namespace MaybeError;
public static class MaybeExtensions
{
public static T ValueOrDefault<T, E>(this IValueMaybe<T, E> maybe, T defaultValue) where T : struct where E : Error
{
if (maybe.HasError)
return defaultValue;
return maybe.Value;
}
public static T? ValueOrDefault<T, E>(this IValueMaybe<T, E> maybe) where T : struct where E : Error
{
if (maybe.HasError)
return default;
return maybe.Value;
}
public static R As<R, T, E>(this IValueMaybe<T, E> maybe, Func<T, R> predicate) where T : struct where E : Error
{
return predicate(maybe.Value);
}
public static R? AsOrDefault<R, T, E>(this IValueMaybe<T, E> maybe, Func<T, R> predicate) where T : struct where E : Error
{
if (maybe.HasError)
return default;
return predicate(maybe.Value);
}
public static R AsOrDefault<R, T, E>(this IValueMaybe<T, E> maybe, Func<T, R> predicate, R defaultValue) where T : struct where E : Error
{
if (maybe.HasError)
return defaultValue;
return predicate(maybe.Value);
}
public static ValueMaybe<T2, E> Map<T, T2, E>(this IValueMaybe<T, E> maybe, Func<T, T2> map) where T : struct where T2 : struct where E : Error
{
if (maybe.HasError)
return maybe.Error;
return map(maybe.Value);
}
public static ValueMaybe<T, E2> MapError<T, E, E2>(this IValueMaybe<T, E> maybe, Func<E, E2> map) where T : struct where E : Error where E2 : Error
{
if (!maybe.HasError)
return maybe.Value;
return map(maybe.Error);
}
public static T ValueOrDefault<T, E>(this IMaybe<T, E> maybe, T defaultValue) where E : Error
{
if (maybe.HasError)
return defaultValue;
return maybe.Value;
}
public static T? ValueOrDefault<T, E>(this IMaybe<T, E> maybe) where E : Error
{
if (maybe.HasError)
return default;
return maybe.Value;
}
public static R As<R, T, E>(this IMaybe<T, E> maybe, Func<T, R> predicate) where E : Error
{
return predicate(maybe.Value);
}
public static R? AsOrDefault<R, T, E>(this IMaybe<T, E> maybe, Func<T, R> predicate) where E : Error
{
if (maybe.HasError)
return default;
return predicate(maybe.Value);
}
public static R AsOrDefault<R, T, E>(this IMaybe<T, E> maybe, Func<T, R> predicate, R defaultValue) where E : Error
{
if (maybe.HasError)
return defaultValue;
return predicate(maybe.Value);
}
public static Maybe<T2, E> Map<T, T2, E>(this IMaybe<T, E> maybe, Func<T, T2> map) where E : Error
{
if (maybe.HasError)
return maybe.Error;
return map(maybe.Value);
}
public static Maybe<T, E2> MapError<T, E, E2>(this IMaybe<T, E> maybe, Func<E, E2> map) where E : Error where E2 : Error
{
if (!maybe.HasError)
return maybe.Value;
return map(maybe.Error);
}
}