pisum

Pisum.Result (1.23.0)

Published 2026-04-14 14:41:04 +02:00 by mschnecke

Installation

dotnet nuget add source --name pisum --username your_username --password your_token 
dotnet add package --source pisum --version 1.23.0 Pisum.Result

About this package

Pisum Result Library.

Pisum.Result

A lightweight .NET library implementing the Result pattern for functional error handling without exceptions.

Installation

dotnet add package Pisum.Result

Quick Start

using Pisum.Result;

// Return a success result
Result<int> successResult = Result.Success(42);

// Return a failure result
Result<int> failureResult = Result.Fail<int>(new Error("NOT_FOUND", "Item was not found"));

// Check the result
if (successResult.IsSuccess)
{
    Console.WriteLine($"Value: {successResult.Value}");
}

if (failureResult.IsFailed)
{
    foreach (var error in failureResult.Errors)
    {
        Console.WriteLine($"Error [{error.Code}]: {error.Message}");
    }
}

Features

  • Exception-free error handling - Errors are data, not exceptions
  • Type-safe results - Generic Result<T> for strongly-typed success values
  • Implicit conversions - Seamlessly create results from values or errors
  • Error aggregation - Collect multiple errors in a single failure state
  • Immutable - Thread-safe, predictable behavior

Usage

Creating Results

// Success without value
Result result = Result.Success();

// Success with value
Result<string> result = Result.Success("Hello");

// Failure with single error
Result result = Result.Fail(new Error("ERROR_CODE", "Something went wrong"));

// Failure with multiple errors
Result result = Result.Fail(new IError[]
{
    new Error("ERROR_1", "First error"),
    new Error("ERROR_2", "Second error")
});

// Using implicit conversion
Result<int> result = 42;                              // Success
Result<int> result = new Error("INVALID", "Invalid"); // Failure

Working with Errors

// Generic error
var error = new Error("INVALID_INPUT", "The input value is invalid");

// Validation error with property tracking
var validationError = new ValidationError("Email is required", "Email");

Pattern in Methods

public Result<User> GetUser(int id)
{
    var user = _repository.Find(id);

    if (user == null)
        return new Error("USER_NOT_FOUND", $"User with ID {id} was not found");

    return user;
}

// Usage
var result = GetUser(123);

if (result.IsSuccess)
{
    var user = result.Value;
    // Process user
}
else
{
    // Handle errors
    foreach (var error in result.Errors)
    {
        _logger.LogError("Error [{Code}]: {Message}", error.Code, error.Message);
    }
}

API Reference

Result

Member Description
IsSuccess Returns true if the operation succeeded
IsFailed Returns true if the operation failed
Errors Read-only collection of errors
Success() Creates a success result
Success<T>(T value) Creates a success result with a value
Fail(IError error) Creates a failure result with an error
Fail(IError[] errors) Creates a failure result with multiple errors
Create<T>(T value) Creates a success result from a value

Result<T>

Member Description
Value The success value (throws if IsFailed)

Error

Member Description
Code Error identifier code
Message Optional error message

ValidationError

Member Description
Code Always returns "VALIDATION_ERROR"
Message Validation error message
Property Name of the property that failed validation

License

Copyright (c) 2026 pisum.net

Details
NuGet
2026-04-14 14:41:04 +02:00
15
pisum.net
9.6 KiB
Assets (2)
Versions (2) View all
1.23.0 2026-04-14
1.22.0 2026-04-14