<PackageReference Include="Polly.Core" Version="8.0.0-alpha.1" />

PredicateInvoker<TArgs>

abstract class PredicateInvoker<TArgs>
using System; using System.Runtime.CompilerServices; using System.Threading.Tasks; namespace Polly.Utils { internal abstract class PredicateInvoker<[System.Runtime.CompilerServices.Nullable(2)] TArgs> { [System.Runtime.CompilerServices.Nullable(new byte[] { 0, 1 })] private sealed class NonGenericPredicateInvoker : PredicateInvoker<TArgs> { [System.Runtime.CompilerServices.Nullable(new byte[] { 1, 0, 1, 1, 0 })] private readonly Func<OutcomeArguments<object, TArgs>, ValueTask<bool>> _predicate; public NonGenericPredicateInvoker([System.Runtime.CompilerServices.Nullable(new byte[] { 1, 0, 1, 1, 0 })] Func<OutcomeArguments<object, TArgs>, ValueTask<bool>> predicate) { _predicate = predicate; } public override ValueTask<bool> HandleAsync<[System.Runtime.CompilerServices.Nullable(2)] TResult>([System.Runtime.CompilerServices.Nullable(new byte[] { 0, 1, 1 })] OutcomeArguments<TResult, TArgs> args) { return this._predicate(args.AsObjectArguments()); } } [System.Runtime.CompilerServices.Nullable(new byte[] { 0, 1 })] private sealed class GenericPredicateInvoker<[System.Runtime.CompilerServices.Nullable(2)] T> : PredicateInvoker<TArgs> { [System.Runtime.CompilerServices.Nullable(1)] private readonly object _predicate; public GenericPredicateInvoker([System.Runtime.CompilerServices.Nullable(new byte[] { 1, 0, 1, 1, 0 })] Func<OutcomeArguments<T, TArgs>, ValueTask<bool>> predicate) { _predicate = predicate; } public override ValueTask<bool> HandleAsync<[System.Runtime.CompilerServices.Nullable(2)] TResult>([System.Runtime.CompilerServices.Nullable(new byte[] { 0, 1, 1 })] OutcomeArguments<TResult, TArgs> args) { if (typeof(TResult) == typeof(T)) return ((Func<OutcomeArguments<TResult, TArgs>, ValueTask<bool>>)this._predicate)(args); return PredicateResult.False; } } [System.Runtime.CompilerServices.NullableContext(2)] [return: System.Runtime.CompilerServices.Nullable(new byte[] { 2, 1 })] public static PredicateInvoker<TArgs> Create<TResult>([System.Runtime.CompilerServices.Nullable(new byte[] { 2, 0, 1, 1, 0 })] Func<OutcomeArguments<TResult, TArgs>, ValueTask<bool>> predicate, bool isGeneric) { Func<OutcomeArguments<object, TArgs>, ValueTask<bool>> func = predicate as Func<OutcomeArguments<object, TArgs>, ValueTask<bool>>; if (func == null) { if (predicate == null) return null; } else if (!isGeneric) { return new NonGenericPredicateInvoker(func); } return new GenericPredicateInvoker<TResult>(predicate); } public abstract ValueTask<bool> HandleAsync<[System.Runtime.CompilerServices.Nullable(2)] TResult>([System.Runtime.CompilerServices.Nullable(new byte[] { 0, 1, 1 })] OutcomeArguments<TResult, TArgs> args); } }