JustFixMe ccfa9d8295
Some checks failed
.NET Publish / publish (push) Failing after 7m10s
modified README.md
2023-12-13 19:32:35 +04:00
2023-11-27 20:41:39 +04:00
2023-12-13 19:29:04 +04:00
2023-12-13 18:20:12 +04:00
2023-11-22 22:40:00 +04:00
2023-11-22 22:40:00 +04:00
2023-12-13 19:32:35 +04:00

Base for Railway Programming in .NET

This library uses features of C# to achieve railway-oriented programming.

The desire is to make somewhat user-friendly experience while using result-object pattern.

Features

  • Immutable Error class
  • Result object
  • A bunch of extensions to use result-object pattern with
  • Try extensions to wrap function calls with result-object
  • Ensure extensions to utilize result-object in validation scenarios

Getting Started

Install from NuGet.org

# install the package using NuGet
dotnet add package Just.Railway

Examples

Error

using Just.Railway;
Error expectedError = Error.New(type: "Some Error", message: "Some error detail");
Error exceptionalError = Error.New(new Exception("Some Exception"));
Error manyErrors = Error.Many(expectedError, exceptionalError);
// the same result while using .Append(..) or +
manyErrors = expectedError.Append(exceptionalError);
manyErrors = expectedError + exceptionalError;

Note

You can easily serialize/deserialize Error to and from JSON

Result

As return value:

Result Foo()
{
    // ...
    if (SomeCondition())
        return Result.Failure(Error.New("Some Error"));
        // or just: return Error.New("Some Error");
    // ...
    return Result.Success();
}

Result<T> Bar()
{
    T value;
    // ...
    if (SomeCondition())
        return Error.New("Some Error");
    // ...
    return value;
}

Consume Result object

Result<int> result = GetResult();

var value = result
    .Append("new")
    .Map((i, s) => $"{s} result {i}")
    .Match(
        onSuccess: x => x,
        onFailure: err => err.ToString()
    );
// value: "new result 1"

Result<int> GetResult() => Result.Success(1);

Try

Result result = Try.Run(SomeAction);
// you can pass up to 5 arguments like this
result = Try.Run(SomeActionWithArguments, 1, 2.0, "3");

// you also can call functions
Result<int> resultWithValue = Try.Run(SomeFunction);

void SomeAction() {}
void SomeActionWithArguments(int a1, double a2, string? a3) {}
int SomeFunction() => 1;

Ensure

var value = GetValue();
Result<int> result = Ensure.That(value)
    .NotNull()
    .Satisfies(i => i < 100)
    .Result();

int? GetValue() => 1;
v1.5.0 Latest
2025-11-11 22:59:27 +04:00
Languages
C# 100%