FallbackHandler<T>
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
namespace Polly.Fallback
{
    [System.Runtime.CompilerServices.NullableContext(1)]
    [System.Runtime.CompilerServices.Nullable(0)]
    internal sealed class FallbackHandler<[System.Runtime.CompilerServices.Nullable(2)] T> : IEquatable<FallbackHandler<T>>
    {
        [CompilerGenerated]
        private Type EqualityContract {
            [CompilerGenerated]
            get {
                return typeof(FallbackHandler<T>);
            }
        }
        [System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            0,
            1,
            0
        })]
        [field: System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            0,
            1,
            0
        })]
        public Func<FallbackPredicateArguments<T>, ValueTask<bool>> ShouldHandle {
            [return: System.Runtime.CompilerServices.Nullable(new byte[] {
                1,
                0,
                1,
                0
            })]
            get;
            [param: System.Runtime.CompilerServices.Nullable(new byte[] {
                1,
                0,
                1,
                0
            })]
            set;
        }
        [System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            0,
            1,
            0,
            0,
            1
        })]
        [field: System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            0,
            1,
            0,
            0,
            1
        })]
        public Func<FallbackActionArguments<T>, ValueTask<Outcome<T>>> ActionGenerator {
            [return: System.Runtime.CompilerServices.Nullable(new byte[] {
                1,
                0,
                1,
                0,
                0,
                1
            })]
            get;
            [param: System.Runtime.CompilerServices.Nullable(new byte[] {
                1,
                0,
                1,
                0,
                0,
                1
            })]
            set;
        }
        public FallbackHandler([System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            0,
            1,
            0
        })] Func<FallbackPredicateArguments<T>, ValueTask<bool>> ShouldHandle, [System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            0,
            1,
            0,
            0,
            1
        })] Func<FallbackActionArguments<T>, ValueTask<Outcome<T>>> ActionGenerator)
        {
            ShouldHandle = ShouldHandle;
            ActionGenerator = ActionGenerator;
            base..ctor();
        }
        [return: System.Runtime.CompilerServices.Nullable(new byte[] {
            0,
            0,
            1
        })]
        public ValueTask<Outcome<T>> GetFallbackOutcomeAsync([System.Runtime.CompilerServices.Nullable(new byte[] {
            0,
            1
        })] FallbackActionArguments<T> args)
        {
            return ActionGenerator(args);
        }
        [CompilerGenerated]
        public override string ToString()
        {
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.Append("FallbackHandler");
            stringBuilder.Append(" { ");
            if (PrintMembers(stringBuilder))
                stringBuilder.Append(' ');
            stringBuilder.Append('}');
            return stringBuilder.ToString();
        }
        [CompilerGenerated]
        private bool PrintMembers(StringBuilder builder)
        {
            RuntimeHelpers.EnsureSufficientExecutionStack();
            builder.Append("ShouldHandle = ");
            builder.Append(ShouldHandle);
            builder.Append(", ActionGenerator = ");
            builder.Append(ActionGenerator);
            return true;
        }
        public static bool operator !=([System.Runtime.CompilerServices.Nullable(new byte[] {
            2,
            0
        })] FallbackHandler<T> left, [System.Runtime.CompilerServices.Nullable(new byte[] {
            2,
            0
        })] FallbackHandler<T> right)
        {
            return !(left == right);
        }
        public static bool operator ==([System.Runtime.CompilerServices.Nullable(new byte[] {
            2,
            0
        })] FallbackHandler<T> left, [System.Runtime.CompilerServices.Nullable(new byte[] {
            2,
            0
        })] FallbackHandler<T> right)
        {
            if ((object)left != right)
                return left?.Equals(right) ?? false;
            return true;
        }
        [CompilerGenerated]
        public override int GetHashCode()
        {
            return (EqualityComparer<Type>.Default.GetHashCode(EqualityContract) * -1521134295 + EqualityComparer<Func<FallbackPredicateArguments<T>, ValueTask<bool>>>.Default.GetHashCode(ShouldHandle)) * -1521134295 + EqualityComparer<Func<FallbackActionArguments<T>, ValueTask<Outcome<T>>>>.Default.GetHashCode(ActionGenerator);
        }
        [System.Runtime.CompilerServices.NullableContext(2)]
        [CompilerGenerated]
        public override bool Equals(object obj)
        {
            return Equals(obj as FallbackHandler<T>);
        }
        [CompilerGenerated]
        public bool Equals([System.Runtime.CompilerServices.Nullable(new byte[] {
            2,
            0
        })] FallbackHandler<T> other)
        {
            if ((object)this != other) {
                if ((object)other != null && EqualityContract == other.EqualityContract && EqualityComparer<Func<FallbackPredicateArguments<T>, ValueTask<bool>>>.Default.Equals(ShouldHandle, other.ShouldHandle))
                    return EqualityComparer<Func<FallbackActionArguments<T>, ValueTask<Outcome<T>>>>.Default.Equals(ActionGenerator, other.ActionGenerator);
                return false;
            }
            return true;
        }
        [CompilerGenerated]
        private FallbackHandler([System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            0
        })] FallbackHandler<T> original)
        {
            ShouldHandle = original.ShouldHandle;
            ActionGenerator = original.ActionGenerator;
        }
        [CompilerGenerated]
        public void Deconstruct([System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            0,
            1,
            0
        })] out Func<FallbackPredicateArguments<T>, ValueTask<bool>> ShouldHandle, [System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            0,
            1,
            0,
            0,
            1
        })] out Func<FallbackActionArguments<T>, ValueTask<Outcome<T>>> ActionGenerator)
        {
            ShouldHandle = this.ShouldHandle;
            ActionGenerator = this.ActionGenerator;
        }
    }
}