A small railway oriented library that offers a simple implementation of the Option type and Result type in C#.
RailSharp uses railway oriented programming to help handle errors and to deal with our old friend NullReferenceException
.
To learn more about railway oriented programming, take a look here!
Here's a quick overview of how to use the Option and Result types:
Option type:
// First, instantiates an option using `Option.None`, `Option.Some(T)`
// or one of the extension methods.
var option = Option.Some(new User("Alan Turing"));
var userName = option
// Then, handle the happy path (i.e. when the option contains a value).
.Map(user => user.Name)
.Do(name => SayHi(name))
// Finally, handle the sad path (i.e. when the option contains no value).
.Reduce(() => "Anonymous")
Result type:
// First, instantiates a result using `Result.Failure(TFailure)`,
// `Result.Success(TSuccess)` or one of the extension methods.
var result = Result.Failure(new UserNotFound());
var httpResponse = result
// Then, handle the happy path (i.e. when the result is a success).
.Map(data => Ok(data))
// Finally, handle the sad paths (i.e. when the result is a failure).
.Catch<UserNotFound>(err => NotFound())
.Catch(err => InternalServerError())
You can also take a look at the API documentation or even the unit tests for a deeper understanding.
First, install NuGet. Then, install the NuGet package avalaible at nuget.org using the dotnet CLI:
dotnet add package RailSharp
First, you can check if your issue has already been tracked here.
Otherwise, you can check if it's already fixed by pulling the develop branch, building the solution and then using the generated DLL files direcly in your project.
If you still hit a problem, please document it and post it here.
The original code has been inspired from the Pluralsight course Making Your C# Code More Functional by Zoran Horvat.
RailSharp is Copyright © 2018 SoftFrame under the MIT license.