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