SResult 1.3.2
There is a newer version of this package available.
See the version list below for details.
See the version list below for details.
dotnet add package SResult --version 1.3.2
NuGet\Install-Package SResult -Version 1.3.2
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SResult" Version="1.3.2" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="SResult" Version="1.3.2" />
<PackageReference Include="SResult" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add SResult --version 1.3.2
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: SResult, 1.3.2"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#addin nuget:?package=SResult&version=1.3.2
#tool nuget:?package=SResult&version=1.3.2
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
SResult
This is an "as simple as it could" and a pure Result pattern library.
Why another result pattern?
- Just a boiler plate basic codes made as library for everyday use. No mvc or any bulk.
- It has to have a Result when success.
- It has to have a Reason when fail.
- It impossible to be both or neither.
Structure
You have two flavour available.
Result<TValue>
For simplest use. It returns built inReason
instance when failed.Result<TValue, TReason>
is when you want to use your own Type to use for fails.
Making result of flavor Result<TValue>
var result1 = Result.Success(200);
// Or
var result2 = Result.Fail<int>("Something is wrong");
Making result of flavor Result<TValue, TReason>
var result3 = Result.Success<int, int>(200);
// Or
var result4 = Result.Fail<int, int>(-1);
When returning from method
private static Result<int, string> DummyHttpGet(string url)
{
if (string.IsNullOrEmpty(url))
return Result.Fail<int, string>("Url cannot be blank");
return Result.Success<int, string>(200);
}
Mapping to return type automatically
private static Result<int, string> DummyHttpGet(string url)
{
if (string.IsNullOrEmpty(url)) return "Url cannot be blank";
return 200;
}
// NOTE: Auto mapping won't work with same value and reason type. There is no way to distinguish. Make it manually for those cases. E.g.
private static Result<string, string> InnerMethod(string url)
{
if (string.IsNullOrEmpty(url))
return Result.Fail<string, string>("Parameter cannot be blank");
return Result.Success<string, string>("All good");
}
Do something before returning
public bool Handler()
{
var result = DummyHttpGet("http://somedomain.com")
.OnSuccess((result) => { /* Do something on success with result */ })
.OnFail((reason) => { /* Do something on failure with failure */ });
return result.IsSuccess();
}
private static Result<int, string> DummyHttpGet(string url)
{
if (string.IsNullOrEmpty(url)) return "Url cannot be blank";
return 200;
}
Built in Reason
Initially this was not part of the library. But I end up making basic reason class for all projects which is same 95% of the time. it usually has a string message and a error type sort of thing. So I thought to make a part of it. So those 95% cases are covered. And free to use custom type when required.
Built in Reason examples
var reason1 = new Reason("Something wrong", ReasonType.Forbidden);
var reason2 = new Reason("Something wrong");
Reason reason3 = "Something wrong";
var reason4 = Reason.Error("Something wrong");
var reason5 = Reason.InvalidArgument("Something wrong");
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. 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. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net8.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.