Skip to content

Commit

Permalink
Add missing OrElse and GetOrElse methods to Result and Either
Browse files Browse the repository at this point in the history
  • Loading branch information
bash committed Jul 11, 2023
1 parent fd8ab52 commit 2a57f66
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 3 deletions.
10 changes: 10 additions & 0 deletions Funcky/Monads/Either/Either.Convenience.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,16 @@ public Either<TLeft, TRight> Inspect(Action<TRight> inspector)
return this;
}

/// <remarks>Careful! This overload discards the left value.</remarks>
[Pure]
public Either<TLeft, TRight> OrElse(Either<TLeft, TRight> fallback)
=> Match(left: _ => fallback, right: Either<TLeft>.Return);

[Pure]
public Either<TLeft, TRight> OrElse(Func<TLeft, Either<TLeft, TRight>> fallback)
=> Match(left: fallback, right: Either<TLeft>.Return);

/// <remarks>Careful! This overload discards the left value.</remarks>
[Pure]
public TRight GetOrElse(TRight fallback)
=> Match(left: _ => fallback, right: Identity);
Expand Down
22 changes: 19 additions & 3 deletions Funcky/Monads/Result/Result.Convenience.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,26 @@ public Result<TValidResult> Inspect(Action<TValidResult> inspector)
return this;
}

/// <remarks>Careful! This overload discards the exception.</remarks>
[Pure]
public Result<TValidResult> OrElse(Result<TValidResult> fallback)
=> Match(error: _ => fallback, ok: Result.Return);

[Pure]
public Result<TValidResult> OrElse(Func<Exception, Result<TValidResult>> fallback)
=> Match(error: fallback, ok: Result.Return);

/// <remarks>Careful! This overload discards the exception.</remarks>
[Pure]
public TValidResult GetOrElse(TValidResult fallback)
=> Match(error: _ => fallback, ok: Identity);

[Pure]
public TValidResult GetOrElse(Func<Exception, TValidResult> fallback)
=> Match(error: fallback, ok: Identity);

public TValidResult GetOrThrow()
=> Match(
ok: Identity,
error: ThrowWithOriginalStackTrace);
=> GetOrElse(ThrowWithOriginalStackTrace);

private static TValidResult ThrowWithOriginalStackTrace(Exception exception)
{
Expand Down
6 changes: 6 additions & 0 deletions Funcky/PublicAPI.Unshipped.txt
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
#nullable enable
Funcky.Monads.Either<TLeft, TRight>.OrElse(Funcky.Monads.Either<TLeft, TRight> fallback) -> Funcky.Monads.Either<TLeft, TRight>
Funcky.Monads.Either<TLeft, TRight>.OrElse(System.Func<TLeft, Funcky.Monads.Either<TLeft, TRight>>! fallback) -> Funcky.Monads.Either<TLeft, TRight>
Funcky.Monads.Result<TValidResult>.GetOrElse(System.Func<System.Exception!, TValidResult>! fallback) -> TValidResult
Funcky.Monads.Result<TValidResult>.GetOrElse(TValidResult fallback) -> TValidResult
Funcky.Monads.Result<TValidResult>.OrElse(Funcky.Monads.Result<TValidResult> fallback) -> Funcky.Monads.Result<TValidResult>
Funcky.Monads.Result<TValidResult>.OrElse(System.Func<System.Exception!, Funcky.Monads.Result<TValidResult>>! fallback) -> Funcky.Monads.Result<TValidResult>

0 comments on commit 2a57f66

Please sign in to comment.