Pisum.Result 1.19.0

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) 2025 pisum.net

Showing the top 20 packages that depend on Pisum.Result.

Packages Downloads
Pisum.Result.Validation
Pisum Result Validation Library.
2
Pisum.Result.Validation
Pisum Result Validation Library.
10

.NET Standard 2.1

  • No dependencies.

Version Downloads Last updated
1.19.0 146 01/18/2026
1.18.0 336 10/09/2025
1.18.0-preview 10 10/09/2025
1.17.1-preview 9 10/09/2025
1.17.1-2 12 10/09/2025