Ejemplo n.º 1
0
        public static Task <IResultMonad <T2> > Bind <T1, T2>(
            this IResultMonad <T1> monad,
            Func <T1, Task <IResultMonad <T2> > > func)
        {
            if (monad is ResultSuccess <T1> success)
            {
                return(func(success.Result));
            }

            if (monad is ResultError <T1> error)
            {
                return(Task.FromResult(error.To <T1, T2>()));
            }
            throw new UnknownTypeException(monad.GetType(), $"Unable to determine how to bind the monad {monad.GetType()}.");
        }
Ejemplo n.º 2
0
        public static IMessageResult <T> ToMessageResult <T>(this IResultMonad <T> result)
        {
            switch (result)
            {
            case ResultSuccess <T> s:
                return(new MessageResultSuccess <T>
                {
                    Result = s.Result
                });

            case ResultError <T> e:
                return(new MessageResultError <T>
                {
                    Errors = e.errors
                });

            default:
                throw new Exception($"Unable to convert to a message type {result}");
            }
        }