public static IFailableResult <TNewResult, TFailure> OnSuccess <TResult, TFailure, TNewResult>( this IFailableResult <TResult, TFailure> result, Func <TResult, IFailableResult <TNewResult, TFailure> > onSuccess ) => result.Handle( s => onSuccess(s), f => FailureResult <TNewResult, TFailure> .Create(f));
public static Task <IFailableResult <TNewResult, TFailure> > OnSuccessAsync <TResult, TFailure, TNewResult>( this IFailableResult <TResult, TFailure> result, Func <TResult, Task <IFailableResult <TNewResult, TFailure> > > onSuccessAsync ) => result.Handle( onSuccessAsync, f => FailureResult <TNewResult, TFailure> .CreateAsync(f));
public static IFailableResult <TResult, TNewFailure> OnFailure <TResult, TFailure, TNewFailure>( this IFailableResult <TResult, TFailure> result, Func <TFailure, TNewFailure> onFailure ) => result.Handle( s => SuccessResult <TResult, TNewFailure> .Create(s), f => FailureResult <TResult, TNewFailure> .Create(onFailure(f)));
public static Task <IFailableResult <TResult, TNewFailure> > OnFailureAsync <TResult, TFailure, TNewFailure>( this IFailableResult <TResult, TFailure> result, Func <TFailure, Task <TNewFailure> > onFailureAsync, bool configureAwait = false ) => result.Handle( s => SuccessResult <TResult, TNewFailure> .CreateAsync(s), async f => FailureResult <TResult, TNewFailure> .Create(await onFailureAsync(f).ConfigureAwait(configureAwait)));
public static Task <IFailableResult <TNewResult, TFailure> > OnSuccessAsync <TResult, TFailure, TNewResult>( this Task <IFailableResult <TResult, TFailure> > asyncResult, Func <TResult, Task <IFailableResult <TNewResult, TFailure> > > onSuccessAsync, bool configureAwait = false ) => asyncResult.HandleAsync( onSuccessAsync, f => FailureResult <TNewResult, TFailure> .CreateAsync(f), configureAwait);
public static Task <IFailableResult <TResult, TNewFailure> > OnFailureAsync <TResult, TFailure, TNewFailure>( this Task <IFailableResult <TResult, TFailure> > asyncResult, Func <TFailure, TNewFailure> onFailure, bool configureAwait = false ) => asyncResult.HandleAsync( s => SuccessResult <TResult, TNewFailure> .Create(s), f => FailureResult <TResult, TNewFailure> .Create(onFailure(f)), configureAwait);