Skip to content

Commit a9bce3a

Browse files
jaybarden1jbarden
andauthored
Additional MatchAsync methods (#33)
* Additional MatchAsync methods * Helps if the extensions are in the right class * bump version too --------- Co-authored-by: Jason Barden <[email protected]>
1 parent 5acdff5 commit a9bce3a

File tree

3 files changed

+42
-3
lines changed

3 files changed

+42
-3
lines changed

src/AStar.Dev.Functional.Extensions/AStar.Dev.Functional.Extensions.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<IncludeSymbols>true</IncludeSymbols>
1010
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
1111
<PackageId>AStar.Dev.Functional.Extensions</PackageId>
12-
<Version>0.4.0</Version>
12+
<Version>0.4.2</Version>
1313
<PackageReadmeFile>Readme.md</PackageReadmeFile>
1414
<Authors>AStar Development, Jason Barden</Authors>
1515
<Company>AStar Development</Company>
@@ -26,7 +26,7 @@
2626
<PackageReadmeFile>Readme.md</PackageReadmeFile>
2727
<Title>AStar.Dev.Functional.Extensions</Title>
2828
<Copyright>AStar Development 2025</Copyright>
29-
<PackageReleaseNotes>Add an extension method to convert a failures exception message to an instance of the ErrorResponse class.</PackageReleaseNotes>
29+
<PackageReleaseNotes>Add a pair of additional extension methods for MatchAsync to handle additional scenarios.</PackageReleaseNotes>
3030
<PackageIcon>astar.png</PackageIcon>
3131
</PropertyGroup>
3232

src/AStar.Dev.Functional.Extensions/Result.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ public async Task<TResult> MatchAsync<TResult>(
8989
Error err => await onFailure(err.Reason),
9090
_ => throw new InvalidOperationException($"Unrecognized result type: {GetType().Name}")
9191
};
92+
9293
#pragma warning restore S3060
9394

9495
/// <summary>

src/AStar.Dev.Functional.Extensions/ResultExtensions.cs

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,44 @@ namespace AStar.Dev.Functional.Extensions;
1010
[SuppressMessage("ReSharper", "GrammarMistakeInComment")]
1111
public static class ResultExtensions
1212
{
13+
/// <summary>
14+
///
15+
/// </summary>
16+
/// <typeparam name="TSuccess"></typeparam>
17+
/// <typeparam name="TError"></typeparam>
18+
/// <typeparam name="TResult"></typeparam>
19+
/// <param name="resultTask"></param>
20+
/// <param name="onSuccess"></param>
21+
/// <param name="onFailure"></param>
22+
/// <returns></returns>
23+
public static async Task<TResult> MatchAsync<TSuccess, TError, TResult>(
24+
this Task<Result<TSuccess, TError>> resultTask,
25+
Func<TSuccess, Task<TResult>> onSuccess,
26+
Func<TError, Task<TResult>> onFailure)
27+
{
28+
var result = await resultTask;
29+
return await result.Match(onSuccess, onFailure);
30+
}
31+
32+
/// <summary>
33+
///
34+
/// </summary>
35+
/// <typeparam name="TSuccess"></typeparam>
36+
/// <typeparam name="TError"></typeparam>
37+
/// <typeparam name="TResult"></typeparam>
38+
/// <param name="resultTask"></param>
39+
/// <param name="onSuccess"></param>
40+
/// <param name="onFailure"></param>
41+
/// <returns></returns>
42+
public static async Task<TResult> MatchAsync<TSuccess, TError, TResult>(
43+
this Task<Result<TSuccess, TError>> resultTask,
44+
Func<TSuccess, TResult> onSuccess,
45+
Func<TError, TResult> onFailure)
46+
{
47+
var result = await resultTask;
48+
return result.Match(onSuccess, onFailure);
49+
}
50+
1351
/// <summary>
1452
/// Transforms the success value of a <see cref="Result{TSuccess, TError}" /> using the specified mapping function.
1553
/// </summary>
@@ -24,7 +62,7 @@ public static class ResultExtensions
2462
/// </returns>
2563
public static Result<TNew, TError> Map<TSuccess, TError, TNew>(
2664
this Result<TSuccess, TError> result,
27-
Func<TSuccess, TNew> map) =>
65+
Func<TSuccess, TNew> map) =>
2866
result.Match<Result<TNew, TError>>(
2967
ok => new Result<TNew, TError>.Ok(map(ok)),
3068
err => new Result<TNew, TError>.Error(err)

0 commit comments

Comments
 (0)