// *** 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.Snapshots
{
    [EnumType]
    public readonly struct ScalewayInstanceV1SnapshotState : IEquatable<ScalewayInstanceV1SnapshotState>
    {
        private readonly string _value;

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

        public static ScalewayInstanceV1SnapshotState Available { get; } = new ScalewayInstanceV1SnapshotState("available");
        public static ScalewayInstanceV1SnapshotState Snapshotting { get; } = new ScalewayInstanceV1SnapshotState("snapshotting");
        public static ScalewayInstanceV1SnapshotState Error { get; } = new ScalewayInstanceV1SnapshotState("error");
        public static ScalewayInstanceV1SnapshotState InvalidData { get; } = new ScalewayInstanceV1SnapshotState("invalid_data");
        public static ScalewayInstanceV1SnapshotState Importing { get; } = new ScalewayInstanceV1SnapshotState("importing");
        public static ScalewayInstanceV1SnapshotState Exporting { get; } = new ScalewayInstanceV1SnapshotState("exporting");

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

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

        [EditorBrowsable(EditorBrowsableState.Never)]
        public override bool Equals(object? obj) => obj is ScalewayInstanceV1SnapshotState other && Equals(other);
        public bool Equals(ScalewayInstanceV1SnapshotState 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 ScalewayInstanceV1SnapshotVolumeType : IEquatable<ScalewayInstanceV1SnapshotVolumeType>
    {
        private readonly string _value;

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

        public static ScalewayInstanceV1SnapshotVolumeType LSsd { get; } = new ScalewayInstanceV1SnapshotVolumeType("l_ssd");
        public static ScalewayInstanceV1SnapshotVolumeType BSsd { get; } = new ScalewayInstanceV1SnapshotVolumeType("b_ssd");
        public static ScalewayInstanceV1SnapshotVolumeType Unified { get; } = new ScalewayInstanceV1SnapshotVolumeType("unified");

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

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

        [EditorBrowsable(EditorBrowsableState.Never)]
        public override bool Equals(object? obj) => obj is ScalewayInstanceV1SnapshotVolumeType other && Equals(other);
        public bool Equals(ScalewayInstanceV1SnapshotVolumeType 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 State : IEquatable<State>
    {
        private readonly string _value;

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

        public static State Available { get; } = new State("available");
        public static State Snapshotting { get; } = new State("snapshotting");
        public static State Error { get; } = new State("error");
        public static State InvalidData { get; } = new State("invalid_data");
        public static State Importing { get; } = new State("importing");
        public static State Exporting { get; } = new State("exporting");

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

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

        [EditorBrowsable(EditorBrowsableState.Never)]
        public override bool Equals(object? obj) => obj is State other && Equals(other);
        public bool Equals(State 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 VolumeType : IEquatable<VolumeType>
    {
        private readonly string _value;

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

        public static VolumeType LSsd { get; } = new VolumeType("l_ssd");
        public static VolumeType BSsd { get; } = new VolumeType("b_ssd");
        public static VolumeType Unified { get; } = new VolumeType("unified");

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

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

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

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

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