Ejemplo n.º 1
0
 public static SafePipeline <TSuccess, TNewFailure> ToFailure <TSuccess, TFailure, TNewFailure>(
     this SafePipeline <TSuccess, TFailure> @this, Func <TFailure, TNewFailure> transformFailure)
 => CreateSafePipeline.With(async() => await @this.Flatten().MapToAsync(async task =>
                                                                        (await task).EitherFold(
                                                                            result => Result <TSuccess, TNewFailure> .Succeeded(result.Success),
                                                                            result => Result <TSuccess, TNewFailure> .Failed(transformFailure(result.Failure)))
                                                                        ));
Ejemplo n.º 2
0
 public static SafePipeline <TSuccess, string> ToStringFailure <TSuccess>(
     this SafePipeline <TSuccess, Exception> @this)
 => CreateSafePipeline.With(async() => await @this.Flatten().MapToAsync(async task =>
                                                                        (await task).EitherFold(
                                                                            result => Result <TSuccess, string> .Succeeded(result.Success),
                                                                            result => Result <TSuccess, string> .Failed(result.Failure.ToString()))
                                                                        ));
Ejemplo n.º 3
0
        public async Task SafePipeComposesWithFunctionsAndOtherSafePipesCorrectly()
        {
            async Task <Result <int, string> > GetFirstValue(int number) => await Result <int, string> .Succeeded(number + 4).AsTask();
            async Task <Result <int, string> > GetSecondValue(int number) => await Result <int, string> .Succeeded(number + 5).AsTask();

            async Task <int> GetThirdValue(int number) => await(number + 4).AsTask();

            int GetFourthValue(int number) => number + 5;

            SafePipeline <int, Exception> GetFithValue(int number) => CreateSafePipeline.TryWith(() => number + 6);

            var firstPipe  = CreateSafePipeline.With(() => GetFirstValue(5));
            var secondPipe = firstPipe.Select(GetSecondValue);
            var thirdPipe  = secondPipe.Select(GetThirdValue);
            var fourthPipe = secondPipe.Select(GetFourthValue);
            var fithPipe   = fourthPipe.SelectMany(value => GetFithValue(value).ToStringFailure());

            var finalPipe = from firstValue in secondPipe
                            from secondValue in thirdPipe
                            from thirdValue in fithPipe
                            select firstValue + secondValue + thirdValue;

            var result = await finalPipe.Flatten();

            Assert.True(result.IsSuccess);
            Assert.Equal(57, result.Success);
        }
Ejemplo n.º 4
0
        public async Task Select_SafePipeResturnsFailedResultIfThereIsAnException()
        {
            int InvalidDivideByZeroOperation(int number) => number / 0;
            async Task <int> GetValue(int number) => await(number + 4).AsTask();

            var firstPipe = CreateSafePipeline.TryWith(() => InvalidDivideByZeroOperation(5));
            var finalPipe = firstPipe.Select(GetValue);

            var result = await finalPipe.Flatten();

            Assert.True(result.IsFailure);
            Assert.True(result.Failure is Exception);
        }
Ejemplo n.º 5
0
        public async Task SelectMany_SafePipeResturnsFailedResultIfThereIsAnException()
        {
            int InvalidDivideByZeroOperation(int number) => number / 0;
            async Task <int> GetValue(int number) => await(number + 4).AsTask();

            var firstPipe  = CreateSafePipeline.TryWith(() => GetValue(5));
            var secondPipe = firstPipe.SelectMany(value => CreateSafePipeline.TryWith(() => InvalidDivideByZeroOperation(value)));

            var finalPipe = from firstValue in firstPipe
                            from secondValue in secondPipe
                            select firstValue + secondValue;

            var result = await secondPipe.Flatten();

            Assert.True(result.IsFailure);
            Assert.True(result.Failure is Exception);
        }