/// <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)); }
/// <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)); }
/// <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()); }
/// <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); }