public static Task <OperationResult <T> > RequireAsync <T>(this OperationResult <T> currentOperationResult, AsyncPredicate <OperationResult <T> > condition, AsyncFunc <OperationResult <T>, IOperationError> errorBuilder) => currentOperationResult .DoWhenAsync(async x => !await condition.AssertNotNull(nameof(condition)) .Invoke(x), async x => OperationResult <T> .FromError( await errorBuilder.AssertNotNull(nameof(errorBuilder)) .Invoke(x)));
public static Task <OperationResult> RequireAsync(this OperationResult currentOperationResult, AsyncPredicate <OperationResult> condition, Func <OperationResult, IOperationError> errorBuilder) => currentOperationResult .DoWhenAsync(async(FunctionalResults.OperationResult x) => !await condition.AssertNotNull(nameof(condition)) .Invoke((FunctionalResults.OperationResult)x), (FunctionalResults.OperationResult x) => (FunctionalResults.OperationResult)FunctionalResults.OperationResult.FromError( errorBuilder.AssertNotNull(nameof(errorBuilder)) .Invoke((FunctionalResults.OperationResult)x)));
public static Task <OperationResult <T> > BranchOnFailureWhenAsync <T>(this OperationResult <T> currentOperationResult, AsyncPredicate <IOperationError> condition, AsyncAction <IOperationError> branchAction) => currentOperationResult .BranchWhenAsync(async x => x.IsFailure && await condition.AssertNotNull(nameof(condition)) .Invoke(x.Error), x => branchAction.AssertNotNull(nameof(branchAction)) .Invoke(x.Error));
public static Task <OperationResult <T> > BranchOnFailureWhenAsync <T>(this OperationResult <T> currentOperationResult, AsyncPredicate condition, Action branchAction) => currentOperationResult .BranchWhenAsync(async x => x.IsFailure && await condition.AssertNotNull(nameof(condition)) .Invoke(), branchAction);
public static Task <OperationResult <T> > ContinueOnFailureWhenAsync <T>(this OperationResult <T> prevOperationResult, AsyncPredicate <IOperationError> condition, AsyncFunc <IOperationError, OperationResult <T> > nextOperation) => prevOperationResult .ContinueWhenAsync(async x => x.IsFailure && await condition.AssertNotNull(nameof(condition)) .Invoke(x.Error), x => nextOperation.AssertNotNull(nameof(nextOperation)) .Invoke(x.Error));
public static Task <OperationResult <T> > ContinueOnFailureWhenAsync <T>(this OperationResult <T> prevOperationResult, AsyncPredicate condition, Func <OperationResult <T> > nextOperation) => prevOperationResult .ContinueWhenAsync(async x => x.IsFailure && await condition.AssertNotNull(nameof(condition)) .Invoke(), nextOperation);
public static Task <OperationResult> RequireOnSuccessAsync(this OperationResult currentOperationResult, AsyncPredicate condition, AsyncFunc <IOperationError> errorBuilder) => currentOperationResult .DoOnSuccessWhenAsync(async() => !await condition.AssertNotNull(nameof(condition)) .Invoke(), async() => OperationResult.FromError(await errorBuilder.AssertNotNull(nameof(errorBuilder)) .Invoke()));
public static Task <OperationResult <T> > RequireOnSuccessAsync <T>(this OperationResult <T> currentOperationResult, AsyncPredicate <T> condition, Func <T, IOperationError> errorBuilder) => currentOperationResult .DoOnSuccessWhenAsync(async x => !await condition.AssertNotNull(nameof(condition)) .Invoke(x), x => (FunctionalResults.OperationResult)FunctionalResults.OperationResult.FromError(errorBuilder.AssertNotNull(nameof(errorBuilder)) .Invoke(x)));
public static async Task <OperationResult <T> > BranchWhenAsync <T>(this OperationResult <T> prevOperationResult, AsyncPredicate <OperationResult <T> > condition, AsyncAction <OperationResult <T> > branchAction) => await condition.AssertNotNull(nameof(condition)) .Invoke(prevOperationResult.AssertNotNull(nameof(prevOperationResult))) ? await prevOperationResult .BranchAsync(branchAction) : prevOperationResult;
public static Task <OperationResult <TPrimary> > DoOnSuccessWhenAsync <TPrimary>(this OperationResult <TPrimary> primaryOperationResult, AsyncPredicate condition, Func <OperationResult> secondaryOperation) => primaryOperationResult .DoWhenAsync(async x => x.IsSuccess && await condition.AssertNotNull(nameof(condition)) .Invoke(), secondaryOperation);
public static Task <OperationResult> BranchOnSuccessWhenAsync(this OperationResult currentOperationResult, AsyncPredicate condition, AsyncAction branchAction) => currentOperationResult .BranchWhenAsync(async x => x.IsSuccess && await condition.AssertNotNull(nameof(condition)) .Invoke(), branchAction);
public static Task <OperationResult <T> > BranchOnSuccessWhenAsync <T>(this OperationResult <T> currentOperationResult, AsyncPredicate <T> condition, AsyncAction <T> branchAction) => currentOperationResult .BranchWhenAsync(async x => x.IsSuccess && await condition.AssertNotNull(nameof(condition)) .Invoke(x.Value), x => branchAction.AssertNotNull(nameof(branchAction)) .Invoke(x.Value));
public static async Task <OperationResult <T> > ContinueWhenAsync <T>(this OperationResult <T> prevOperationResult, AsyncPredicate <OperationResult <T> > condition, AsyncFunc <OperationResult <T>, OperationResult <T> > nextOperation) => await prevOperationResult .ContinueWhenAsync( await condition.AssertNotNull(nameof(condition)) .Invoke(prevOperationResult.AssertNotNull(nameof(prevOperationResult))), nextOperation);
public static async Task <OperationResult> ContinueWhenAsync(this OperationResult prevOperationResult, AsyncPredicate condition, Func <OperationResult, OperationResult> nextOperation) => prevOperationResult .ContinueWhen( await condition.AssertNotNull(nameof(condition)) .Invoke(), nextOperation);
public static Task <OperationResult <T> > ContinueOnSuccessWhenAsync <T>(this OperationResult <T> prevOperationResult, AsyncPredicate <T> condition, AsyncFunc <T, OperationResult <T> > nextOperation) => prevOperationResult .ContinueWhenAsync(async x => x.IsSuccess && await condition.AssertNotNull(nameof(condition)) .Invoke(prevOperationResult.Value), x => nextOperation.AssertNotNull(nameof(nextOperation)) .Invoke(prevOperationResult.Value));
public static Task <OperationResult <TPrimary> > DoOnSuccessWhenAsync <TPrimary, TSecondary>(this OperationResult <TPrimary> primaryOperationResult, AsyncPredicate <TPrimary> condition, AsyncFunc <TPrimary, OperationResult <TSecondary> > secondaryOperation) => primaryOperationResult .DoWhenAsync(async x => x.IsSuccess && await condition.AssertNotNull(nameof(condition)) .Invoke(x.Value), x => secondaryOperation.AssertNotNull(nameof(secondaryOperation)) .Invoke(x.Value));
public static Task <OperationResult> ContinueOnSuccessWhenAsync(this OperationResult prevOperationResult, AsyncPredicate condition, AsyncFunc <OperationResult> nextOperation) => prevOperationResult .ContinueWhenAsync(async x => x.IsSuccess && await condition.AssertNotNull(nameof(condition)) .Invoke(), nextOperation);
public static async Task <OperationResult <T> > BranchWhenAsync <T>(this OperationResult <T> prevOperationResult, AsyncPredicate condition, Action branchAction) => await condition.AssertNotNull(nameof(condition)) .Invoke() ? prevOperationResult .Branch(branchAction) : prevOperationResult;