<filename>sdk/dotnet/PlacementGroups/Enums.cs// *** WARNING: this file was generated by pulumigen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

using System;
using System.ComponentModel;
using Pulumi;

namespace Pulumi.ScalewayInstances.PlacementGroups
{
    [EnumType]
    public readonly struct PolicyMode : IEquatable<PolicyMode>
    {
        private readonly string _value;

        private PolicyMode(string value)
        {
            _value = value ?? throw new ArgumentNullException(nameof(value));
        }

        public static PolicyMode Optional { get; } = new PolicyMode("optional");
        public static PolicyMode Enforced { get; } = new PolicyMode("enforced");

        public static bool operator ==(PolicyMode left, PolicyMode right) => left.Equals(right);
        public static bool operator !=(PolicyMode left, PolicyMode right) => !left.Equals(right);

        public static explicit operator string(PolicyMode value) => value._value;

        [EditorBrowsable(EditorBrowsableState.Never)]
        public override bool Equals(object? obj) => obj is PolicyMode other && Equals(other);
        public bool Equals(PolicyMode other) => string.Equals(_value, other._value, StringComparison.Ordinal);

        [EditorBrowsable(EditorBrowsableState.Never)]
        public override int GetHashCode() => _value?.GetHashCode() ?? 0;

        public override string ToString() => _value;
    }

    [EnumType]
    public readonly struct PolicyType : IEquatable<PolicyType>
    {
        private readonly string _value;

        private PolicyType(string value)
        {
            _value = value ?? throw new ArgumentNullException(nameof(value));
        }

        public static PolicyType MaxAvailability { get; } = new PolicyType("max_availability");
        public static PolicyType LowLatency { get; } = new PolicyType("low_latency");

        public static bool operator ==(PolicyType left, PolicyType right) => left.Equals(right);
        public static bool operator !=(PolicyType left, PolicyType right) => !left.Equals(right);

        public static explicit operator string(PolicyType value) => value._value;

        [EditorBrowsable(EditorBrowsableState.Never)]
        public override bool Equals(object? obj) => obj is PolicyType other && Equals(other);
        public bool Equals(PolicyType other) => string.Equals(_value, other._value, StringComparison.Ordinal);

        [EditorBrowsable(EditorBrowsableState.Never)]
        public override int GetHashCode() => _value?.GetHashCode() ?? 0;

        public override string ToString() => _value;
    }

    [EnumType]
    public readonly struct ScalewayInstanceV1PlacementGroupPolicyMode : IEquatable<ScalewayInstanceV1PlacementGroupPolicyMode>
    {
        private readonly string _value;

        private ScalewayInstanceV1PlacementGroupPolicyMode(string value)
        {
            _value = value ?? throw new ArgumentNullException(nameof(value));
        }

        public static ScalewayInstanceV1PlacementGroupPolicyMode Optional { get; } = new ScalewayInstanceV1PlacementGroupPolicyMode("optional");
        public static ScalewayInstanceV1PlacementGroupPolicyMode Enforced { get; } = new ScalewayInstanceV1PlacementGroupPolicyMode("enforced");

        public static bool operator ==(ScalewayInstanceV1PlacementGroupPolicyMode left, ScalewayInstanceV1PlacementGroupPolicyMode right) => left.Equals(right);
        public static bool operator !=(ScalewayInstanceV1PlacementGroupPolicyMode left, ScalewayInstanceV1PlacementGroupPolicyMode right) => !left.Equals(right);

        public static explicit operator string(ScalewayInstanceV1PlacementGroupPolicyMode value) => value._value;

        [EditorBrowsable(EditorBrowsableState.Never)]
        public override bool Equals(object? obj) => obj is ScalewayInstanceV1PlacementGroupPolicyMode other && Equals(other);
        public bool Equals(ScalewayInstanceV1PlacementGroupPolicyMode other) => string.Equals(_value, other._value, StringComparison.Ordinal);

        [EditorBrowsable(EditorBrowsableState.Never)]
        public override int GetHashCode() => _value?.GetHashCode() ?? 0;

        public override string ToString() => _value;
    }

    [EnumType]
    public readonly struct ScalewayInstanceV1PlacementGroupPolicyType : IEquatable<ScalewayInstanceV1PlacementGroupPolicyType>
    {
        private readonly string _value;

        private ScalewayInstanceV1PlacementGroupPolicyType(string value)
        {
            _value = value ?? throw new ArgumentNullException(nameof(value));
        }

        public static ScalewayInstanceV1PlacementGroupPolicyType MaxAvailability { get; } = new ScalewayInstanceV1PlacementGroupPolicyType("max_availability");
        public static ScalewayInstanceV1PlacementGroupPolicyType LowLatency { get; } = new ScalewayInstanceV1PlacementGroupPolicyType("low_latency");

        public static bool operator ==(ScalewayInstanceV1PlacementGroupPolicyType left, ScalewayInstanceV1PlacementGroupPolicyType right) => left.Equals(right);
        public static bool operator !=(ScalewayInstanceV1PlacementGroupPolicyType left, ScalewayInstanceV1PlacementGroupPolicyType right) => !left.Equals(right);

        public static explicit operator string(ScalewayInstanceV1PlacementGroupPolicyType value) => value._value;

        [EditorBrowsable(EditorBrowsableState.Never)]
        public override bool Equals(object? obj) => obj is ScalewayInstanceV1PlacementGroupPolicyType other && Equals(other);
        public bool Equals(ScalewayInstanceV1PlacementGroupPolicyType other) => string.Equals(_value, other._value, StringComparison.Ordinal);

        [EditorBrowsable(EditorBrowsableState.Never)]
        public override int GetHashCode() => _value?.GetHashCode() ?? 0;

        public override string ToString() => _value;
    }
}
