This is an implementation of Result class
Result is exactly what it sounds like - a result from an operation. It can be either Success or Error.
- Easily convert any value to Result without annoying extensions methods
Result<int, string> GetValue(int key)
{
try
{
var value = _repository.Find(key);
return Result.Success(value);
}
catch (Exception ex)
{
return Result.Fail(ex.message);
}
}
- Map/FlatMap result
//use Map function
Result<int, Unit> result = ...
Result<bool, Unit> mappedResult = result.Map(v => v % 2 == 0);
//optionaly map error as well
Result<bool, string> mapperResult = result.Map(v => v % 2 == 0, _ => "error");
//or use LINQ
var result = from x in Double(10)
from y in Double(x)
from z in Double(y)
select x + y + z;
Result<int, Unit> Double(int value)
{
...
}
- Match on Result
Result<int, string> result = ...
IActionResult ret = result.Match(
success: v => Ok(v),
error: e => InternalServerError(e)
);