Skip to content

Repository files navigation

AutoResult.Generator

NuGetNuGet DownloadsCILicense: MIT.NET 10 Ready

A Roslyn source generator that automatically wraps your methods in Result<T> — zero reflection, zero runtime overhead, compile-time safe.

Features

  • Core Result types always generated: Result<T>, Result<T,TError>, Unit, ResultExtensions
  • [TryWrap] generates Try*() variants for every public method in your partial class
  • Supports sync, void, async, and async-void methods
  • Compile-time diagnostics for misuse

Installation

dotnet add package Swevo.AutoResult

Usage

usingAutoResult;[TryWrap]publicpartialclassOrderService{publicintGetOrderId(stringname)=>// ...publicasync Task<Order> FetchOrderAsync(intid)=>// ...publicvoid ProcessOrder(Orderorder)=>// ...}

The generator produces:

publicpartialclassOrderService{publicResult<int>TryGetOrderId(stringname){try{returnResult<int>.Ok(GetOrderId(name));}catch(Exceptionex){returnResult<int>.Fail(ex);}}publicasyncTask<Result<Order>>TryFetchOrderAsync(intid){try{returnResult<Order>.Ok(awaitFetchOrderAsync(id));}catch(Exceptionex){returnResult<Order>.Fail(ex);}}publicResult<Unit>TryProcessOrder(Orderorder){try{ProcessOrder(order);returnResult<Unit>.Ok(Unit.Value);}catch(Exceptionex){returnResult<Unit>.Fail(ex);}}}

Core Types

// Always available — no extra imports neededResult<T>.Ok(value)Result<T>.Fail(exception)Result<T>.IsSuccess/.IsFailureResult<T>.Value /.Error
Result<T,TError>.Ok(value)
Result<T,TError>.Fail(error)
Unit.Value // for void-returning methods

Diagnostics

CodeSeverityDescription
AR001Error[TryWrap] applied to a non-partial class
AR002Warning[TryWrap] class has no wrappable public methods

Why AutoResult?

  • Zero overhead — wrapper code is generated at compile time
  • No boilerplate — stop writing the same try/catch in every service
  • Railway-oriented — compose results cleanly with Map, Bind, Match
  • Minimal API — no third-party Result library required; types live in your project

Also by the same author

🌐 Full suite overview: swevo.github.io

PackageDescription
AutoWireCompile-time DI auto-registration — [Scoped]/[Singleton]/[Transient] generates IServiceCollection code. Zero reflection.
AutoMap.GeneratorCompile-time object mapping — [Map(typeof(Dto))] generates ToDto() extension methods. Zero reflection, AOT-safe.
AutoValidate.GeneratorCompile-time FluentValidation wiring — discovers AbstractValidator<T> subclasses and generates AddValidators().
AutoQuery.GeneratorCompile-time LINQ query specs — [QuerySpec(typeof(T))] generates Apply(IQueryable<T>).
AutoDispatch.GeneratorCompile-time CQRS dispatcher — [Handler] generates a strongly-typed IDispatcher. No IRequest<T>, no reflection.
AutoLog.GeneratorCompile-time high-performance logging — [Log(Level, Message)] on a partial method generates LoggerMessage.Define. AOT-safe.
AutoHttpClient.GeneratorCompile-time typed HTTP client — [HttpClient] on an interface generates a strongly-typed client. AOT-safe Refit alternative.

Related Packages

PackageDownloadsDescription
Swevo.AutoBusDownloadsFree, MIT-licensed in-process message bus for
Swevo.AutoBus.RabbitMQDownloadsRabbitMQ transport for AutoBus
Swevo.AutoAssertDownloadsFree, MIT-licensed fluent assertions for
Swevo.AutoAuthDownloadsA free, MIT-licensed fluent configuration wrapper around OpenIddict for building OAuth2/OIDC token servers in ASP
Swevo.AutoAuditDownloadsCompile-time audit field generation for EF Core entities using Roslyn source generators
Swevo.AutoGuardDownloadsCompile-time guard clauses for
Swevo.AutoImageDownloadsA free, MIT-licensed fluent image processing wrapper around SkiaSharp for
Swevo.AutoFeatureFlagDownloadsCompile-time feature flag stubs for
Swevo.AutoTestDataDownloadsCompile-time test data builders for

License

MIT

About

Compile-time Result<T> discriminated union for .NET. [TryWrap] generates Try*() wrappers for all public methods. Map, Bind, Match, and async variants included.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages