public async Task Flatten_ReturnsATask() { var pipeline = CreatePipeline.With(() => 5); var task = pipeline.Flatten(); Assert.Equal(5, await task); }
public static Pipeline <Result <TSuccess, TFailure> > FlipMerge <TSuccess, TFailure>( this Pipeline <Result <Pipeline <TSuccess>, TFailure> > pipeLine) => pipeLine .SelectMany(result => result.EitherFold( r => r.Success.Select(Result <TSuccess, TFailure> .Succeeded), error => CreatePipeline.Return(Result <TSuccess, TFailure> .Failed(error.Failure))));
public async Task Return_LiftsConstantAndSideEffectFreeValueIntoAPipeline() { var pipeline = CreatePipeline.Return(5); var task = pipeline.Flatten(); Assert.Equal(5, await task); }
public async Task Select_ComposesTaskReturningMethod() { async Task <int> AddFour(int number) => await(number + 4).AsTask(); var pipeline = CreatePipeline.With(() => 5).Select(AddFour); var task = pipeline.Flatten(); Assert.Equal(9, await task); }
public async Task SelectMany_ComposesPipeReturningMethod() { var initialPipeline = CreatePipeline.With(() => 5); var resultingPipeline = initialPipeline.SelectMany(five => CreatePipeline.With(() => five + 4)); var task = resultingPipeline.Flatten(); Assert.Equal(9, await task); }
public async Task SelectMany_AllowsLinqSyntacticSugarForMonadicComposition() { var firstPipeline = CreatePipeline.With(() => 5); var secondPipeline = CreatePipeline.With(() => 6); var thirdPipeline = CreatePipeline.With(() => 9); var resultingPipeline = from firstValue in firstPipeline from secondValue in secondPipeline from thirdValue in thirdPipeline select firstValue + secondValue + thirdValue; var task = resultingPipeline.Flatten(); Assert.Equal(20, await task); }
public Task <CreatePipelineResponse> CreatePipeline( string contactId, string pipelineId, string statusId, string?note = null, int?priority = null, Dictionary <string, string>?customFields = null, CancellationToken cancellationToken = default) { var function = new CreatePipeline( contactId, pipelineId, statusId, note, priority, customFields); return(CallApi <CreatePipelineParams, CreatePipelineResponse>( function, cancellationToken)); }
public static Pipeline <Result <TSuccess, TFailure> > ToPipeline <TSuccess, TFailure>( this Result <TSuccess, TFailure> result) => result.IsSuccess ? CreatePipeline.Return(Result <TSuccess, TFailure> .Succeeded(result.Success)) : CreatePipeline.Return(Result <TSuccess, TFailure> .Failed(result.Failure));
public static Pipeline <Result <TSuccess, TFailure> > FlipMerge <TSuccess, TFailure>( this Result <Pipeline <Result <TSuccess, TFailure> >, TFailure> result) => result.EitherFold(r => r.Success, e => CreatePipeline.Return(Result <TSuccess, TFailure> .Failed(e.Failure)));