ErrorOr.Extensions
1.2.0
See the version list below for details.
dotnet add package ErrorOr.Extensions --version 1.2.0
NuGet\Install-Package ErrorOr.Extensions -Version 1.2.0
<PackageReference Include="ErrorOr.Extensions" Version="1.2.0" />
paket add ErrorOr.Extensions --version 1.2.0
#r "nuget: ErrorOr.Extensions, 1.2.0"
// Install ErrorOr.Extensions as a Cake Addin #addin nuget:?package=ErrorOr.Extensions&version=1.2.0 // Install ErrorOr.Extensions as a Cake Tool #tool nuget:?package=ErrorOr.Extensions&version=1.2.0
ErrorOr.Extensions
An extension library for ErrorOr by Amichai Mantinband.
Features
This library extends the ErrorOr library with useful features to allow for some specific workflows, for creating meaningful error handling in your applications.
Select and SelectMany
An instance of an ErrorOr<T>
can be seen as a list containing a single element or none. With that in mind it would be
useful you have the ability to map an ErrorOr<T>
to a new type/value. This library provides two extensions to allow
for this: Select
and SelectMany
.
The method signatures look basically the same as for IEnumarable<T>
:
ErrorOr<TResult> Select<T, TResult>(this ErrorOr<T> errorOr, Func<T, TResult> mapping)
ErrorOr<TResult> SelectMany<T, TResult>(this ErrorOr<T> errorOr, Func<T, ErrorOr<TResult>> mapping)
These methods allow for changing the value inside an ErrorOr<T>
if it is successful, but keep the errors intact if it
is erroneous.
Example:
ErrorOr<string> errorOr = ErrorOrFactory.From(42).Select(value => value.ToString());
ErrorOr<string> errorOr = ErrorOrFactory.From(42).SelectMany(value => Mapping(value));
ErrorOr<string> Mapping(int value) => ErrorOrFactory.From(value.ToString());
Async
Many APIs work asynchronous with Task<T>
as return type. When using such APIs that return Task<ErrorOr<T>>
it is
useful to be able to use Select
and SelectMany
on them as well without having to strip the Task<T>
beforehand.
This library has you covered. Both, Select
and SelectMany
are provided in three variants:
Task<ErrorOr<TResult>> Select<T, TResult>(this ErrorOr<T> errorOr, Func<T, Task<TResult>> mapping)
Task<ErrorOr<TResult>> Select<T, TResult>(this Task<ErrorOr<T>> errorOrTask, Func<T, TResult> mapping)
Task<ErrorOr<TResult>> Select<T, TResult>(this Task<ErrorOr<T>> errorOrTask, Func<T, Task<TResult>> mapping)
Task<ErrorOr<TResult>> SelectMany<T, TResult>(this ErrorOr<T> errorOr, Func<T, Task<ErrorOr<TResult>>> mapping)
Task<ErrorOr<TResult>> SelectMany<T, TResult>(this Task<ErrorOr<T>> errorOrTask, Func<T, ErrorOr<TResult>> mapping)
Task<ErrorOr<TResult>> SelectMany<T, TResult>(this Task<ErrorOr<T>> errorOrTask, Func<T, Task<ErrorOr<TResult>>> mapping)
Every use case should be covered.
LINQ and LINQ async
This library provides LINQ extensions for ErrorOr
. This enables a very clean approach of binding multiple ErrorOr
generating function together. You can write them with the usual from x in y select x
syntax you know and love from
LINQ. If an error occurs along the way, processing the chain is interrupted and the collected errors are passed to the
resulting instance of ErrorOr<T>
.
Example:
ErrorOr<string> errorOr =
from userId in ParseInput("10") // returns ErrorOr<int>
from user in userRepository.Lookup(userId) // returns ErrorOr<User>
select user.Name // maps to string
This also works if the methods that are chained are asynchronous:
Task<ErrorOr<string>> errorOr =
from userId in ParseInput("10") // returns Task<ErrorOr<int>>
from user in userRepository.Lookup(userId) // returns Task<ErrorOr<User>>
select user.Name // maps to string
Closing
The author of this extension library is not affiliated with Amichai Mantinband nor does he claim anything from the ErrorOr library.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- ErrorOr (>= 1.6.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.