IndQuestResults.Analyzers 1.0.8

dotnet add package IndQuestResults.Analyzers --version 1.0.8
                    
NuGet\Install-Package IndQuestResults.Analyzers -Version 1.0.8
                    
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="IndQuestResults.Analyzers" Version="1.0.8">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="IndQuestResults.Analyzers" Version="1.0.8" />
                    
Directory.Packages.props
<PackageReference Include="IndQuestResults.Analyzers">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
                    
Project file
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 IndQuestResults.Analyzers --version 1.0.8
                    
#r "nuget: IndQuestResults.Analyzers, 1.0.8"
                    
#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.
#:package IndQuestResults.Analyzers@1.0.8
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=IndQuestResults.Analyzers&version=1.0.8
                    
Install as a Cake Addin
#tool nuget:?package=IndQuestResults.Analyzers&version=1.0.8
                    
Install as a Cake Tool

IndQuestResults - Enterprise-Grade Result<T> Library

Build Status Mutation Score Coverage License .NET Version NuGet Contributors Code of Conduct Docs

A battle-tested, enterprise-grade Result<T> library for functional error handling in .NET applications. Provides type-safe, performant, and expressive ways to represent operation outcomes without exceptions.

Key Features

  • Type safety: eliminate null-reference exceptions in control flow
  • Performance: Span-based optimizations and reduced allocations
  • Functional: Map, Bind, Match, Recover with fluent composition
  • Thread-safe: immutable design, no shared mutable state
  • JSON serializable: API responses and persistence ready (System.Text.Json)
  • Warnings on success: diagnostics with quality metadata
  • Quality: mutation-tested, high coverage

Quick Start

Installation

dotnet add package IndQuestResults

Basic Usage

using IndQuestResults;

// Success results
var ok = Result.Success();
var okWithValue = Result<string>.Success("Hello World");

// Failure results
var fail = Result.WithFailure("Operation failed");
var failWithValue = Result<int>.WithFailure("Parse error", value: 0);

// Multiple errors
var many = Result.WithFailure(new[] { "Error 1", "Error 2" });

// Warnings (successful with diagnostics)
var withWarnings = Result<string>.WithWarnings(
    new[] { "Performance warning" },
    "Operation completed"
);

// Warnings with quality metadata (confidence + missing data ratio)
var withWarnsAndMeta = Result<string>.WithWarnings(
    warnings: new[] { "Heuristic fill for missing fields", "Low signal period" },
    value: "Computed",
    confidence: 0.82,            // clamped to [0,1]
    missingDataRatio: 0.25       // clamped to [0,1]
);
Console.WriteLine(withWarnsAndMeta.Confidence);        // 0.82
Console.WriteLine(withWarnsAndMeta.MissingDataRatio);  // 0.25
Console.WriteLine(string.Join(", ", withWarnsAndMeta.Warnings));

Functional Programming (Sync)

using IndQuestResults;

Result<UserDto> CreateUser(string userId)
{
    return Result<string>.Success(userId)
        .Ensure(id => !string.IsNullOrWhiteSpace(id), "empty id")
        .Bind(id => LoadUser(id))
        .Map(user => user.ToDto())
        .Tap(dto => _logger.LogInformation($"User {dto.Id} processed"))
        .Recover(() => Result<UserDto>.Success(UserDto.Default));
}

Async

Use the async API in IndQuestResults.Async.ResultAsync for fluent async composition.

using IndQuestResults;
using IndQuestResults.Async;

var dto = await ResultAsync
    .BindAsync(GetUserAsync(userId), user => ValidateUserAsync(user))
    .MapAsync(valid => valid.ToDtoAsync())
    .TapAsync(dto => CacheAsync(dto))
    .RecoverAsync(() => GetDefaultUserDtoAsync());

// Collections
var users = await ResultAsync.TraverseParallelAsync(
    userIds,
    id => GetUserAsync(id),
    maxDegreeOfParallelism: 4
);

Full API and patterns: docs/Result-Manual.md

More docs: docs/README.md

Note: Optional analyzers are available in IndQuestResults.Analyzers to guide async usage. Rule IQR0001 suggests using ResultAsync for async chaining and includes a one-click code fix.

Package Information

  • Target Framework: .NET 10.0+
  • Dependencies: none (zero external dependencies)
  • Package ID: IndQuestResults
  • License: MIT
  • Coverage: 74.5% with comprehensive test suite
  • Quality: 85%+ mutation testing score

Release Notes & Download

  • Recommended: Release/IndQuestResults.1.0.7.nupkg
  • Previous: Release/IndQuestResults.1.0.5.nupkg, Release/IndQuestResults.1.0.4.nupkg, Release/IndQuestResults.1.0.3.nupkg, Release/IndQuestResults.1.0.2.nupkg, Release/IndQuestResults.1.0.1.nupkg
  • See CHANGELOG.md for details

Contributing

We welcome high-quality contributions! See CONTRIBUTING.md and CODE_OF_CONDUCT.md.

  • 100% unit test coverage for new code
  • Mutation testing score ≥ 85%
  • Zero compilation warnings (warnings as errors)
  • XML documentation for public APIs
  • Benchmarks for performance-sensitive changes

License

This project is licensed under the MIT License - see the LICENSE file for details.

Support & Community

  • Discussions: GitHub Discussions
  • Issues: GitHub Issues
  • Documentation: docs/Result-Manual.md
  • Examples: Src/Code/samples/

Quality First: We maintain enterprise-grade standards because this library powers production applications. Every contribution makes the .NET ecosystem stronger!

There are no supported framework assets in this package.

Learn more about Target Frameworks and .NET Standard.

This package has 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.

Version Downloads Last Updated
1.0.8 31 9/28/2025
1.0.5 201 9/19/2025
1.0.5-dev 201 9/19/2025