Esempio n. 1
0
        /// <summary>
        /// Execute <paramref name="onError"/> if response has errors
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <typeparam name="TError"></typeparam>
        /// <param name="source"></param>
        /// <param name="errorPredicate">Error predicate</param>
        /// <param name="onError"></param>
        /// <returns></returns>
        public static async ValueTask <ApiResponse <T> > OnError <T, TError>(
            this ValueTask <ApiResponse <T> > source,
            ExactTypeErrorPredicate <TError> errorPredicate,
            Action <TError> onError
            )
            where TError : Error
        {
            var response = await source.ConfigureAwait(false);

            return(response.OnErrorRef(ref errorPredicate, onError));
        }
Esempio n. 2
0
        /// <summary>
        /// Switch to <paramref name="ifError"/> flow if response returns error
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <typeparam name="TError"></typeparam>
        /// <param name="source"></param>
        /// <param name="errorPredicate">Predicate for error to execute <paramref name="ifError"/></param>
        /// <param name="ifError">Flow to execute in case of error</param>
        /// <returns></returns>
        public static async ValueTask <ApiResponse <T> > IfError <T, TError>(
            this ValueTask <ApiResponse <T> > source,
            ExactTypeErrorPredicate <TError> errorPredicate,
            Func <TError, ValueTask <ApiResponse <T> > > ifError)
            where TError : Error
        {
            var response = await source.ConfigureAwait(false);

            return(await response
                   .IfError(errorPredicate, ifError)
                   .ConfigureAwait(false));
        }
        /// <summary>
        /// Return ok response and suppress errors that match <paramref name="errorPredicate"/>
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <typeparam name="TError"></typeparam>
        /// <param name="source"></param>
        /// <param name="errorPredicate">Predicate for errors</param>
        /// <returns></returns>
        public static ApiResponse <Unit> SuppressErrors <T, TError>(
            this ApiResponse <T> source,
            ExactTypeErrorPredicate <TError> errorPredicate)
            where TError : Error
        {
            if (source.Error is not null && errorPredicate.IsMatch(source.Error))
            {
                return(ApiResponse.Ok());
            }

            return(source.AsUnit());
        }
        /// <summary>
        /// Execute <paramref name="onError"/> if response has errors
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <typeparam name="TError"></typeparam>
        /// <param name="source"></param>
        /// <param name="errorPredicate">Error predicate</param>
        /// <param name="onError"></param>
        /// <returns></returns>
        public static async Task <ApiResponse <T> > OnError <T, TError>(
            this Task <ApiResponse <T> > source,
            ExactTypeErrorPredicate <TError> errorPredicate,
            Func <TError, Task> onError
            )
            where TError : Error
        {
            var response = await source.ConfigureAwait(false);

            return(await response
                   .OnError(errorPredicate, onError)
                   .ConfigureAwait(false));
        }
Esempio n. 5
0
        /// <summary>
        /// Switch to <paramref name="ifError"/> flow if response returns error
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <typeparam name="TError"></typeparam>
        /// <param name="source"></param>
        /// <param name="errorPredicate">Predicate for error to execute <paramref name="ifError"/></param>
        /// <param name="ifError">Flow to execute in case of error</param>
        /// <returns></returns>
        public static ApiResponse <T> IfError <T, TError>(
            this ApiResponse <T> source,
            ExactTypeErrorPredicate <TError> errorPredicate,
            Func <TError, ApiResponse <T> > ifError)
            where TError : Error
        {
            if (source.Error is not null && errorPredicate.IsMatch(source.Error))
            {
                return(ifError((TError)source.Error));
            }

            return(source);
        }
        /// <summary>
        /// Switch to <paramref name="ifError"/> flow if response returns error
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <typeparam name="TError"></typeparam>
        /// <param name="source"></param>
        /// <param name="errorPredicate">Predicate for error to execute <paramref name="ifError"/></param>
        /// <param name="ifError">Flow to execute in case of error</param>
        /// <returns></returns>
        public static async Task <ApiResponse <T> > IfError <T, TError>(
            this ApiResponse <T> source,
            ExactTypeErrorPredicate <TError> errorPredicate,
            Func <TError, Task <ApiResponse <T> > > ifError)
            where TError : Error
        {
            if (source.Error is not null && errorPredicate.IsMatch(source.Error))
            {
                return(await ifError((TError)source.Error).ConfigureAwait(false));
            }

            return(source);
        }
        /// <summary>
        /// Return ok response and suppress errors that match <paramref name="errorPredicate"/>
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <typeparam name="TError"></typeparam>
        /// <param name="source"></param>
        /// <param name="errorPredicate">Predicate for errors</param>
        /// <returns></returns>
        public static async ValueTask <ApiResponse <Unit> > SuppressErrors <T, TError>(
            this ValueTask <ApiResponse <T> > source,
            ExactTypeErrorPredicate <TError> errorPredicate)
            where TError : Error
        {
            var response = await source.ConfigureAwait(false);

            if (response.Error is not null && errorPredicate.IsMatch(response.Error))
            {
                return(ApiResponse.Ok());
            }

            return(response.AsUnit());
        }
Esempio n. 8
0
        /// <summary>
        /// Execute <paramref name="onError"/> if response has errors
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <typeparam name="TError"></typeparam>
        /// <param name="source"></param>
        /// <param name="errorPredicate">Error predicate</param>
        /// <param name="onError"></param>
        /// <returns></returns>
        public static ApiResponse <T> OnError <T, TError>(
            this ApiResponse <T> source,
            ExactTypeErrorPredicate <TError> errorPredicate,
            Action <TError> onError
            )
            where TError : Error
        {
            if (source.Error is not null && errorPredicate.IsMatch(source.Error))
            {
                onError((TError)source.Error);
            }

            return(source);
        }