This commit is contained in:
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<PackageId>MaybeError</PackageId>
|
<PackageId>MaybeError</PackageId>
|
||||||
<Version>1.1.0</Version>
|
<Version>1.2.0</Version>
|
||||||
<Authors>Amatsugu</Authors>
|
<Authors>Amatsugu</Authors>
|
||||||
<PackageDescription>Errors as values</PackageDescription>
|
<PackageDescription>Errors as values</PackageDescription>
|
||||||
<RepositoryUrl>https://github.com/Amatsugu/MaybeError</RepositoryUrl>
|
<RepositoryUrl>https://github.com/Amatsugu/MaybeError</RepositoryUrl>
|
||||||
|
|||||||
@@ -37,6 +37,20 @@ public static class MaybeExtensions
|
|||||||
return predicate(maybe.Value);
|
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
|
public static T ValueOrDefault<T, E>(this IMaybe<T, E> maybe, T defaultValue) where E : Error
|
||||||
{
|
{
|
||||||
@@ -71,4 +85,18 @@ public static class MaybeExtensions
|
|||||||
return predicate(maybe.Value);
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -115,4 +115,40 @@ public class MaybeTests
|
|||||||
value = new InvalidOperationException();
|
value = new InvalidOperationException();
|
||||||
Assert.That(value.AsOrDefault(v => v.Length, -4), Is.EqualTo(-4));
|
Assert.That(value.AsOrDefault(v => v.Length, -4), Is.EqualTo(-4));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void MapTest()
|
||||||
|
{
|
||||||
|
Maybe<string> value = "Test";
|
||||||
|
var valueMapped = value.Map(v => $"A{v}");
|
||||||
|
Assert.That(valueMapped.HasValue, Is.True);
|
||||||
|
Assert.That(valueMapped.Value, Is.EqualTo("ATest"));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void MapTestError()
|
||||||
|
{
|
||||||
|
Maybe<string> value = new Error("Err");
|
||||||
|
var valueMapped = value.Map(v => $"A{v}");
|
||||||
|
Assert.That(valueMapped.HasError, Is.True);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void MapErrorTest()
|
||||||
|
{
|
||||||
|
Maybe<string> value = "Test";
|
||||||
|
var valueMapped = value.MapError(v => new Error($"A{v}"));
|
||||||
|
Assert.That(valueMapped.HasValue, Is.True);
|
||||||
|
Assert.That(valueMapped.Value, Is.EqualTo("Test"));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void MapErrorTestError()
|
||||||
|
{
|
||||||
|
Maybe<string> value = new Error("Err");
|
||||||
|
var valueMapped = value.MapError(v => new Error($"A{v.Message}"));
|
||||||
|
Assert.That(valueMapped.HasError, Is.True);
|
||||||
|
Assert.That(valueMapped.Error!.Message, Is.EqualTo("AErr"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -115,4 +115,40 @@ public class ValueMaybeTests
|
|||||||
value = new InvalidOperationException();
|
value = new InvalidOperationException();
|
||||||
Assert.That(value.AsOrDefault(v => v.ToString(), "err"), Is.EqualTo("err"));
|
Assert.That(value.AsOrDefault(v => v.ToString(), "err"), Is.EqualTo("err"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void MapTest()
|
||||||
|
{
|
||||||
|
ValueMaybe<int> value = 1;
|
||||||
|
var valueMapped = value.Map(v => v + 1);
|
||||||
|
Assert.That(valueMapped.HasValue, Is.True);
|
||||||
|
Assert.That(valueMapped.Value, Is.EqualTo(2));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void MapTestError()
|
||||||
|
{
|
||||||
|
ValueMaybe<int> value = new Error("Err");
|
||||||
|
var valueMapped = value.Map(v => v + 1);
|
||||||
|
Assert.That(valueMapped.HasError, Is.True);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void MapErrorTest()
|
||||||
|
{
|
||||||
|
Maybe<int> value = 1;
|
||||||
|
var valueMapped = value.MapError(v => new Error($"A{v}"));
|
||||||
|
Assert.That(valueMapped.HasValue, Is.True);
|
||||||
|
Assert.That(valueMapped.Value, Is.EqualTo(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void MapErrorTestError()
|
||||||
|
{
|
||||||
|
ValueMaybe<int> value = new Error("Err");
|
||||||
|
var valueMapped = value.MapError(v => new Error($"A{v.Message}"));
|
||||||
|
Assert.That(valueMapped.HasError, Is.True);
|
||||||
|
Assert.That(valueMapped.Error!.Message, Is.EqualTo("AErr"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user