HedgingHandler<T>
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
namespace Polly.Hedging.Utils
{
    [NullableContext(1)]
    [Nullable(0)]
    internal sealed class HedgingHandler<[Nullable(2)] T> : IEquatable<HedgingHandler<T>>
    {
        [CompilerGenerated]
        private Type EqualityContract {
            [CompilerGenerated]
            get {
                return typeof(HedgingHandler<T>);
            }
        }
        [Nullable(new byte[] {
            1,
            0,
            1,
            0
        })]
        [field: Nullable(new byte[] {
            1,
            0,
            1,
            0
        })]
        public Func<HedgingPredicateArguments<T>, ValueTask<bool>> ShouldHandle {
            [return: Nullable(new byte[] {
                1,
                0,
                1,
                0
            })]
            get;
            [param: Nullable(new byte[] {
                1,
                0,
                1,
                0
            })]
            set;
        }
        [Nullable(new byte[] {
            1,
            0,
            1,
            2,
            0,
            0,
            1
        })]
        [field: Nullable(new byte[] {
            1,
            0,
            1,
            2,
            0,
            0,
            1
        })]
        public Func<HedgingActionGeneratorArguments<T>, Func<ValueTask<Outcome<T>>>> ActionGenerator {
            [return: Nullable(new byte[] {
                1,
                0,
                1,
                2,
                0,
                0,
                1
            })]
            get;
            [param: Nullable(new byte[] {
                1,
                0,
                1,
                2,
                0,
                0,
                1
            })]
            set;
        }
        [Nullable(new byte[] {
            2,
            0,
            1
        })]
        [field: Nullable(new byte[] {
            2,
            0,
            1
        })]
        public Func<OnHedgingArguments<T>, ValueTask> OnHedging {
            [return: Nullable(new byte[] {
                2,
                0,
                1
            })]
            get;
            [param: Nullable(new byte[] {
                2,
                0,
                1
            })]
            set;
        }
        public HedgingHandler([Nullable(new byte[] {
            1,
            0,
            1,
            0
        })] Func<HedgingPredicateArguments<T>, ValueTask<bool>> ShouldHandle, [Nullable(new byte[] {
            1,
            0,
            1,
            2,
            0,
            0,
            1
        })] Func<HedgingActionGeneratorArguments<T>, Func<ValueTask<Outcome<T>>>> ActionGenerator, [Nullable(new byte[] {
            2,
            0,
            1
        })] Func<OnHedgingArguments<T>, ValueTask> OnHedging)
        {
            ShouldHandle = ShouldHandle;
            ActionGenerator = ActionGenerator;
            OnHedging = OnHedging;
            base..ctor();
        }
        [return: Nullable(new byte[] {
            2,
            0,
            0,
            1
        })]
        public Func<ValueTask<Outcome<T>>> GenerateAction([Nullable(new byte[] {
            0,
            1
        })] HedgingActionGeneratorArguments<T> args)
        {
            HedgingActionGeneratorArguments<T> arg = new HedgingActionGeneratorArguments<T>(args.PrimaryContext, args.ActionContext, args.AttemptNumber, args.Callback);
            return ActionGenerator(arg);
        }
        [CompilerGenerated]
        public override string ToString()
        {
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.Append("HedgingHandler");
            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);
            builder.Append(", OnHedging = ");
            builder.Append(OnHedging);
            return true;
        }
        public static bool operator !=([Nullable(new byte[] {
            2,
            0
        })] HedgingHandler<T> left, [Nullable(new byte[] {
            2,
            0
        })] HedgingHandler<T> right)
        {
            return !(left == right);
        }
        public static bool operator ==([Nullable(new byte[] {
            2,
            0
        })] HedgingHandler<T> left, [Nullable(new byte[] {
            2,
            0
        })] HedgingHandler<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<HedgingPredicateArguments<T>, ValueTask<bool>>>.Default.GetHashCode(ShouldHandle)) * -1521134295 + EqualityComparer<Func<HedgingActionGeneratorArguments<T>, Func<ValueTask<Outcome<T>>>>>.Default.GetHashCode(ActionGenerator)) * -1521134295 + EqualityComparer<Func<OnHedgingArguments<T>, ValueTask>>.Default.GetHashCode(OnHedging);
        }
        [NullableContext(2)]
        [CompilerGenerated]
        public override bool Equals(object obj)
        {
            return Equals(obj as HedgingHandler<T>);
        }
        [CompilerGenerated]
        public bool Equals([Nullable(new byte[] {
            2,
            0
        })] HedgingHandler<T> other)
        {
            if ((object)this != other) {
                if ((object)other != null && EqualityContract == other.EqualityContract && EqualityComparer<Func<HedgingPredicateArguments<T>, ValueTask<bool>>>.Default.Equals(ShouldHandle, other.ShouldHandle) && EqualityComparer<Func<HedgingActionGeneratorArguments<T>, Func<ValueTask<Outcome<T>>>>>.Default.Equals(ActionGenerator, other.ActionGenerator))
                    return EqualityComparer<Func<OnHedgingArguments<T>, ValueTask>>.Default.Equals(OnHedging, other.OnHedging);
                return false;
            }
            return true;
        }
        [CompilerGenerated]
        private HedgingHandler([Nullable(new byte[] {
            1,
            0
        })] HedgingHandler<T> original)
        {
            ShouldHandle = original.ShouldHandle;
            ActionGenerator = original.ActionGenerator;
            OnHedging = original.OnHedging;
        }
        [CompilerGenerated]
        public void Deconstruct([Nullable(new byte[] {
            1,
            0,
            1,
            0
        })] out Func<HedgingPredicateArguments<T>, ValueTask<bool>> ShouldHandle, [Nullable(new byte[] {
            1,
            0,
            1,
            2,
            0,
            0,
            1
        })] out Func<HedgingActionGeneratorArguments<T>, Func<ValueTask<Outcome<T>>>> ActionGenerator, [Nullable(new byte[] {
            2,
            0,
            1
        })] out Func<OnHedgingArguments<T>, ValueTask> OnHedging)
        {
            ShouldHandle = this.ShouldHandle;
            ActionGenerator = this.ActionGenerator;
            OnHedging = this.OnHedging;
        }
    }
}