Add initial project structure with Result type and extension methods

This commit is contained in:
2025-07-23 08:43:59 +02:00
commit 94ad6e57d7
7 changed files with 249 additions and 0 deletions

View File

@@ -0,0 +1,55 @@
namespace Rehlert.RoP.Extensions;
public static class OnErrorExtensions
{
public static Result<TIn, TErr> OnError<TIn, TErr>(this Result<TIn, TErr> value, Action<TErr> action)
{
value.Match(
_ => { },
err => action(err.Value)
);
return value;
}
public static async Task<Result<TIn, TErr>> OnError<TIn, TErr>(
this Result<TIn, TErr> value,
Func<TErr, Task> func
)
{
await value.Match(
_ => Task.CompletedTask,
err => func(err.Value)
);
return value;
}
public static async Task<Result<TIn, TErr>> OnError<TIn, TErr>(
this Task<Result<TIn, TErr>> value,
Func<TErr, Task> func
)
{
var valRes = await value;
await valRes.Match(
_ => Task.CompletedTask,
err => func(err.Value)
);
return valRes;
}
public static async Task<Result<TIn, TErr>> OnError<TIn, TErr>(
this Task<Result<TIn, TErr>> value,
Action<TErr> action
)
{
var valRes = await value;
valRes.Match(
_ => { },
err => action(err.Value)
);
return valRes;
}
}