Table of Contents

Class ResultExtensions

Namespace
Vonage.Common.Monads
Assembly
Vonage.dll

Extensions for Result, including async operations on Task of Result.

public static class ResultExtensions
Inheritance
ResultExtensions
Inherited Members

Methods

BindAsync<TSource, TDestination>(Task<Result<TSource>>, Func<TSource, Task<Result<TDestination>>>)

Monadic bind operation with an asynchronous bind function.

public static Task<Result<TDestination>> BindAsync<TSource, TDestination>(this Task<Result<TSource>> task, Func<TSource, Task<Result<TDestination>>> bind)

Parameters

task Task<Result<TSource>>

Asynchronous result.

bind Func<TSource, Task<Result<TDestination>>>

Asynchronous bind operation.

Returns

Task<Result<TDestination>>

Asynchronous bound functor.

Type Parameters

TSource

Source type.

TDestination

Return type.

Examples

Task<Result<int>> asyncUserId = GetUserIdAsync();
Result<User> user = await asyncUserId.BindAsync(id => FetchUserAsync(id));

Bind<TSource, TDestination>(Task<Result<TSource>>, Func<TSource, Result<TDestination>>)

Monadic bind operation on an asynchronous Result.

public static Task<Result<TDestination>> Bind<TSource, TDestination>(this Task<Result<TSource>> task, Func<TSource, Result<TDestination>> bind)

Parameters

task Task<Result<TSource>>

Asynchronous result.

bind Func<TSource, Result<TDestination>>

Bind operation.

Returns

Task<Result<TDestination>>

Bound functor.

Type Parameters

TSource

Source type.

TDestination

Return type.

Examples

Task<Result<int>> asyncResult = GetResultAsync();
Result<string> bound = await asyncResult.Bind(value => Result<string>.FromSuccess(value.ToString()));

DoWhenFailure<TSource>(Task<Result<TSource>>, Action<IResultFailure>)

Executes an operation if the asynchronous Result is in Failure state.

public static Task<Result<TSource>> DoWhenFailure<TSource>(this Task<Result<TSource>> task, Action<IResultFailure> failureOperation)

Parameters

task Task<Result<TSource>>

Asynchronous result.

failureOperation Action<IResultFailure>

Failure operation.

Returns

Task<Result<TSource>>

The initial result.

Type Parameters

TSource

Source type.

Examples

Task<Result<string>> asyncResult = GetResultAsync();
await asyncResult.DoWhenFailure(error => logger.LogError(error.GetFailureMessage()));

DoWhenSuccess<TSource>(Task<Result<TSource>>, Action<TSource>)

Executes an operation if the asynchronous Result is in Success state.

public static Task<Result<TSource>> DoWhenSuccess<TSource>(this Task<Result<TSource>> task, Action<TSource> successOperation)

Parameters

task Task<Result<TSource>>

Asynchronous result.

successOperation Action<TSource>

Success operation.

Returns

Task<Result<TSource>>

The initial result.

Type Parameters

TSource

Source type.

Examples

Task<Result<string>> asyncResult = GetResultAsync();
await asyncResult.DoWhenSuccess(value => Console.WriteLine($"Got: {value}"));

Do<TSource>(Task<Result<TSource>>, Action<TSource>, Action<IResultFailure>)

Executes operations depending on the current state of an asynchronous Result.

public static Task<Result<TSource>> Do<TSource>(this Task<Result<TSource>> task, Action<TSource> successOperation, Action<IResultFailure> failureOperation)

Parameters

task Task<Result<TSource>>

Asynchronous result.

successOperation Action<TSource>

Success operation.

failureOperation Action<IResultFailure>

Failure operation.

Returns

Task<Result<TSource>>

The initial result.

Type Parameters

TSource

Source type.

Examples

Task<Result<string>> asyncResult = GetResultAsync();
await asyncResult.Do(
    successOperation: value => Console.WriteLine($"Success: {value}"),
    failureOperation: error => Console.WriteLine($"Error: {error.GetFailureMessage()}")
);

IfFailure<TSource>(Task<Result<TSource>>, TSource)

Returns the default value if the asynchronous Result is in the Failure state, the success value otherwise.

public static Task<TSource> IfFailure<TSource>(this Task<Result<TSource>> task, TSource defaultValue)

Parameters

task Task<Result<TSource>>

Asynchronous result.

defaultValue TSource

Value to return if in the Failure state.

Returns

Task<TSource>

The default value if the Result is in the Failure state, the success value otherwise.

Type Parameters

TSource

Source type.

Examples

Task<Result<int>> asyncResult = GetResultAsync();
int value = await asyncResult.IfFailure(0); // Returns 0 if Failure

IfSuccessAsync<T>(Task<Result<T>>, Func<T, Task>)

Invokes the asynchronous action if the Result is in the Success state, otherwise nothing happens.

public static Task<Result<T>> IfSuccessAsync<T>(this Task<Result<T>> task, Func<T, Task> action)

Parameters

task Task<Result<T>>

Asynchronous result.

action Func<T, Task>

Asynchronous action to invoke.

Returns

Task<Result<T>>

The initial result.

Type Parameters

T

The source type.

Examples

Task<Result<string>> asyncResult = GetResultAsync();
await asyncResult.IfSuccessAsync(async value => await SaveAsync(value));

IfSuccess<T>(Task<Result<T>>, Action<T>)

Invokes the action if the asynchronous Result is in the Success state, otherwise nothing happens.

public static Task<Result<T>> IfSuccess<T>(this Task<Result<T>> task, Action<T> action)

Parameters

task Task<Result<T>>

Asynchronous result.

action Action<T>

Action to invoke.

Returns

Task<Result<T>>

The initial result.

Type Parameters

T

The source type.

Examples

Task<Result<string>> asyncResult = GetResultAsync();
await asyncResult.IfSuccess(value => Console.WriteLine($"Got: {value}"));

MapAsync<TSource, TDestination>(Task<Result<TSource>>, Func<TSource, Task<TDestination>>)

Projects from one value to another using an asynchronous projection function.

public static Task<Result<TDestination>> MapAsync<TSource, TDestination>(this Task<Result<TSource>> task, Func<TSource, Task<TDestination>> map)

Parameters

task Task<Result<TSource>>

Asynchronous result.

map Func<TSource, Task<TDestination>>

Asynchronous projection function.

Returns

Task<Result<TDestination>>

Asynchronous mapped functor.

Type Parameters

TSource

Source type.

TDestination

Resulting functor value type.

Examples

Task<Result<int>> asyncResult = GetIdAsync();
Result<User> user = await asyncResult.MapAsync(id => FetchUserAsync(id));

Map<TSource, TDestination>(Task<Result<TSource>>, Func<TSource, TDestination>)

Projects from one value to another on an asynchronous Result.

public static Task<Result<TDestination>> Map<TSource, TDestination>(this Task<Result<TSource>> task, Func<TSource, TDestination> map)

Parameters

task Task<Result<TSource>>

Asynchronous result.

map Func<TSource, TDestination>

Projection function.

Returns

Task<Result<TDestination>>

Asynchronous mapped functor.

Type Parameters

TSource

Source type.

TDestination

Resulting functor value type.

Examples

Task<Result<int>> asyncResult = GetResultAsync();
Result<string> mapped = await asyncResult.Map(value => value.ToString());

Match<TSource, TDestination>(Task<Result<TSource>>, Func<TSource, TDestination>, Func<IResultFailure, TDestination>)

Match the two states of an asynchronous Result and return a non-null TDestination.

public static Task<TDestination> Match<TSource, TDestination>(this Task<Result<TSource>> task, Func<TSource, TDestination> successOperation, Func<IResultFailure, TDestination> failureOperation)

Parameters

task Task<Result<TSource>>

Asynchronous result.

successOperation Func<TSource, TDestination>

Success match operation.

failureOperation Func<IResultFailure, TDestination>

Failure match operation.

Returns

Task<TDestination>

A non-null TDestination.

Type Parameters

TSource

Source type.

TDestination

Return type.

Examples

Task<Result<int>> asyncResult = GetResultAsync();
string message = await asyncResult.Match(
    successOperation: value => $"Success: {value}",
    failureOperation: error => $"Error: {error.GetFailureMessage()}"
);