BadScript 2
Loading...
Searching...
No Matches
RailwaySharp.ErrorHandling.ResultExtensions Class Reference

Extensions methods for easier usage. More...

Static Public Member Functions

static void Match< TSuccess, TMessage > (this Result< TSuccess, TMessage > result, Action< TSuccess, IEnumerable< TMessage > > ifSuccess, Action< IEnumerable< TMessage > > ifFailure)
 Allows pattern matching on Results.
 
static TResult Either< TSuccess, TMessage, TResult > (this Result< TSuccess, TMessage > result, Func< TSuccess, IEnumerable< TMessage >, TResult > ifSuccess, Func< IEnumerable< TMessage >, TResult > ifFailure)
 Allows pattern matching on Results.
 
static Result< TResult, TMessage > Map< TSuccess, TMessage, TResult > (this Result< TSuccess, TMessage > result, Func< TSuccess, TResult > func)
 Lifts a Func into a Result and applies it on the given result.
 
static Result< IEnumerable< TSuccess >, TMessage > Collect< TSuccess, TMessage > (this IEnumerable< Result< TSuccess, TMessage > > values)
 Collects a sequence of Results and accumulates their values. If the sequence contains an error the error will be propagated.
 
static Result< IEnumerable< TSuccess >, TMessage > Flatten< TSuccess, TMessage > (this Result< IEnumerable< Result< TSuccess, TMessage > >, TMessage > result)
 Collects a sequence of Results and accumulates their values. If the sequence contains an error the error will be propagated.
 
static Result< TResult, TMessage > SelectMany< TSuccess, TMessage, TResult > (this Result< TSuccess, TMessage > result, Func< TSuccess, Result< TResult, TMessage > > func)
 If the result is a Success it executes the given Func on the value. Otherwise the exisiting failure is propagated.
 
static Result< TResult, TMessage > SelectMany< TSuccess, TMessage, TValue, TResult > (this Result< TSuccess, TMessage > result, Func< TSuccess, Result< TValue, TMessage > > func, Func< TSuccess, TValue, TResult > mapperFunc)
 If the result is a Success it executes the given Func on the value. If the result of the Func is a Success it maps it using the given Func. Otherwise the exisiting failure is propagated.
 
static Result< TResult, TMessage > Select< TSuccess, TMessage, TResult > (this Result< TSuccess, TMessage > result, Func< TSuccess, TResult > func)
 Lifts a Func into a Result and applies it on the given result.
 
static IEnumerable< TMessage > FailedWith< TSuccess, TMessage > (this Result< TSuccess, TMessage > result)
 Returns the error messages or fails if the result was a success.
 
static TSuccess SucceededWith< TSuccess, TMessage > (this Result< TSuccess, TMessage > result)
 Returns the result or fails if the result was an error.
 
static IEnumerable< TMessage > SuccessMessages< TSuccess, TMessage > (this Result< TSuccess, TMessage > result)
 Returns messages in case of success, otherwise an empty sequence.
 

Detailed Description

Extensions methods for easier usage.

Definition at line 547 of file ErrorHandling.cs.

Member Function Documentation

◆ Collect< TSuccess, TMessage >()

static Result< IEnumerable< TSuccess >, TMessage > RailwaySharp.ErrorHandling.ResultExtensions.Collect< TSuccess, TMessage > ( this IEnumerable< Result< TSuccess, TMessage > >  values)
static

Collects a sequence of Results and accumulates their values. If the sequence contains an error the error will be propagated.

Definition at line 615 of file ErrorHandling.cs.

617 {
618 return Trial.Collect(values);
619 }

◆ Either< TSuccess, TMessage, TResult >()

static TResult RailwaySharp.ErrorHandling.ResultExtensions.Either< TSuccess, TMessage, TResult > ( this Result< TSuccess, TMessage >  result,
Func< TSuccess, IEnumerable< TMessage >, TResult >  ifSuccess,
Func< IEnumerable< TMessage >, TResult >  ifFailure 
)
static

Allows pattern matching on Results.

Definition at line 588 of file ErrorHandling.cs.

592 {
593 return Trial.Either(ifSuccess, ifFailure, result);
594 }

◆ FailedWith< TSuccess, TMessage >()

static IEnumerable< TMessage > RailwaySharp.ErrorHandling.ResultExtensions.FailedWith< TSuccess, TMessage > ( this Result< TSuccess, TMessage >  result)
static

Returns the error messages or fails if the result was a success.

Definition at line 724 of file ErrorHandling.cs.

725 {
726 if (result.Tag == ResultType.Ok)
727 {
728 Ok<TSuccess, TMessage> ok = (Ok<TSuccess, TMessage>)result;
729
730 throw new Exception(string.Format("Result was a success: {0} - {1}",
731 ok.Success,
732 string.Join(Environment.NewLine,
733 ok.Messages.Select(m => m.ToString())
734 )
735 )
736 );
737 }
738
739 Bad<TSuccess, TMessage> bad = (Bad<TSuccess, TMessage>)result;
740
741 return bad.Messages;
742 }

◆ Flatten< TSuccess, TMessage >()

static Result< IEnumerable< TSuccess >, TMessage > RailwaySharp.ErrorHandling.ResultExtensions.Flatten< TSuccess, TMessage > ( this Result< IEnumerable< Result< TSuccess, TMessage > >, TMessage >  result)
static

Collects a sequence of Results and accumulates their values. If the sequence contains an error the error will be propagated.

Definition at line 628 of file ErrorHandling.cs.

630 {
631 if (result.Tag == ResultType.Ok)
632 {
633 Ok<IEnumerable<Result<TSuccess, TMessage>>, TMessage> ok =
634 (Ok<IEnumerable<Result<TSuccess, TMessage>>, TMessage>)result;
635 IEnumerable<Result<TSuccess, TMessage>> values = ok.Success;
636 Result<IEnumerable<TSuccess>, TMessage> result1 = Collect(values);
637
638 if (result1.Tag == ResultType.Ok)
639 {
640 Ok<IEnumerable<TSuccess>, TMessage> ok1 = (Ok<IEnumerable<TSuccess>, TMessage>)result1;
641
642 return new Ok<IEnumerable<TSuccess>, TMessage>(ok1.Success, ok1.Messages);
643 }
644
645 Bad<IEnumerable<TSuccess>, TMessage> bad1 = (Bad<IEnumerable<TSuccess>, TMessage>)result1;
646
647 return new Bad<IEnumerable<TSuccess>, TMessage>(bad1.Messages);
648 }
649
650 Bad<IEnumerable<Result<TSuccess, TMessage>>, TMessage> bad =
651 (Bad<IEnumerable<Result<TSuccess, TMessage>>, TMessage>)result;
652
653 return new Bad<IEnumerable<TSuccess>, TMessage>(bad.Messages);
654 }

◆ Map< TSuccess, TMessage, TResult >()

static Result< TResult, TMessage > RailwaySharp.ErrorHandling.ResultExtensions.Map< TSuccess, TMessage, TResult > ( this Result< TSuccess, TMessage >  result,
Func< TSuccess, TResult >  func 
)
static

Lifts a Func into a Result and applies it on the given result.

Definition at line 602 of file ErrorHandling.cs.

604 {
605 return Trial.Lift(func, result);
606 }

◆ Match< TSuccess, TMessage >()

static void RailwaySharp.ErrorHandling.ResultExtensions.Match< TSuccess, TMessage > ( this Result< TSuccess, TMessage >  result,
Action< TSuccess, IEnumerable< TMessage > >  ifSuccess,
Action< IEnumerable< TMessage > >  ifFailure 
)
static

Allows pattern matching on Results.

Definition at line 555 of file ErrorHandling.cs.

558 {
559 if (ifSuccess == null)
560 {
561 throw new ArgumentException(nameof(ifSuccess));
562 }
563
564 if (ifFailure == null)
565 {
566 throw new ArgumentException(nameof(ifFailure));
567 }
568
569 Ok<TSuccess, TMessage> ok = result as Ok<TSuccess, TMessage>;
570
571 if (ok != null)
572 {
573 ifSuccess(ok.Success, ok.Messages);
574
575 return;
576 }
577
578 Bad<TSuccess, TMessage> bad = (Bad<TSuccess, TMessage>)result;
579 ifFailure(bad.Messages);
580 }

◆ Select< TSuccess, TMessage, TResult >()

static Result< TResult, TMessage > RailwaySharp.ErrorHandling.ResultExtensions.Select< TSuccess, TMessage, TResult > ( this Result< TSuccess, TMessage >  result,
Func< TSuccess, TResult >  func 
)
static

Lifts a Func into a Result and applies it on the given result.

Definition at line 711 of file ErrorHandling.cs.

714 {
715 return Trial.Lift(func, result);
716 }

◆ SelectMany< TSuccess, TMessage, TResult >()

static Result< TResult, TMessage > RailwaySharp.ErrorHandling.ResultExtensions.SelectMany< TSuccess, TMessage, TResult > ( this Result< TSuccess, TMessage >  result,
Func< TSuccess, Result< TResult, TMessage > >  func 
)
static

If the result is a Success it executes the given Func on the value. Otherwise the exisiting failure is propagated.

Definition at line 663 of file ErrorHandling.cs.

666 {
667 return Trial.Bind(func, result);
668 }

◆ SelectMany< TSuccess, TMessage, TValue, TResult >()

static Result< TResult, TMessage > RailwaySharp.ErrorHandling.ResultExtensions.SelectMany< TSuccess, TMessage, TValue, TResult > ( this Result< TSuccess, TMessage >  result,
Func< TSuccess, Result< TValue, TMessage > >  func,
Func< TSuccess, TValue, TResult >  mapperFunc 
)
static

If the result is a Success it executes the given Func on the value. If the result of the Func is a Success it maps it using the given Func. Otherwise the exisiting failure is propagated.

Definition at line 678 of file ErrorHandling.cs.

682 {
683 if (func == null)
684 {
685 throw new ArgumentException(nameof(func));
686 }
687
688 if (mapperFunc == null)
689 {
690 throw new ArgumentException(nameof(mapperFunc));
691 }
692
693 Func<TSuccess, Func<TValue, TResult>> curriedMapper = suc => val => mapperFunc(suc, val);
694
695 Func<
696 Result<TSuccess, TMessage>,
697 Result<TValue, TMessage>,
698 Result<TResult, TMessage>
699 > liftedMapper = (a, b) => Trial.Lift2(curriedMapper, a, b);
700 Result<TValue, TMessage> v = Trial.Bind(func, result);
701
702 return liftedMapper(result, v);
703 }

◆ SucceededWith< TSuccess, TMessage >()

static TSuccess RailwaySharp.ErrorHandling.ResultExtensions.SucceededWith< TSuccess, TMessage > ( this Result< TSuccess, TMessage >  result)
static

Returns the result or fails if the result was an error.

Definition at line 750 of file ErrorHandling.cs.

751 {
752 if (result.Tag == ResultType.Ok)
753 {
754 Ok<TSuccess, TMessage> ok = (Ok<TSuccess, TMessage>)result;
755
756 return ok.Success;
757 }
758
759 Bad<TSuccess, TMessage> bad = (Bad<TSuccess, TMessage>)result;
760
761 throw new Exception(string.Format("Result was an error: {0}",
762 string.Join(Environment.NewLine, bad.Messages.Select(m => m.ToString()))
763 )
764 );
765 }

◆ SuccessMessages< TSuccess, TMessage >()

static IEnumerable< TMessage > RailwaySharp.ErrorHandling.ResultExtensions.SuccessMessages< TSuccess, TMessage > ( this Result< TSuccess, TMessage >  result)
static

Returns messages in case of success, otherwise an empty sequence.

Definition at line 770 of file ErrorHandling.cs.

771 {
772 if (result.Tag == ResultType.Ok)
773 {
774 Ok<TSuccess, TMessage> ok = (Ok<TSuccess, TMessage>)result;
775
776 return ok.Messages;
777 }
778
779 return Enumerable.Empty<TMessage>();
780 }

The documentation for this class was generated from the following file: