Skip to content

Lindronics/OneOf.Result

Repository files navigation

OneOf.Result

.NET build, test, release

What?

Adds a new Result<TOk, TErr> type built on top of the popular OneOf library.

Defines many useful methods and Task extensions allowing for chaining operations, similar to the Result type in Rust.

Example usage

    Result<Foo, Bar> GetSuccess() => new Foo();
    Result<Foo, Bar> GetError() => new Bar();
    
    async Task<Result<Foo, Bar>> GetSuccessAsync() => await Task.FromResult(new Foo());
    
    Fizz FooToFizz(Foo foo) => new Fizz();
    async Task<Foo> FizzToFooAsync(Fizz fizz) => await Task.FromResult<Foo>(new Foo());
    
    void DoSomething() {
        var fizz = GetSuccess()
            .Map(x => FooToFizz(x))
            .UnwrapOrElse(() => new Fizz());
            
        var buzz = GetError()
            .Map(x => FooToFizz(x)) // no-op
            .MapErr(x => new Buzz())
            .Match(
                ok => {
                    // do something
                },
                err => {
                    // do something
                } 
            );
    }
    
    async Task DoSomethingAsync() {
        var foo = await GetSuccessAsync()
            .Map(x => FooToFizz(x))
            .MapAsync(FizzToFooAsync)
            .Unwrap();
    }

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages