/*
 * IONOS DBaaS MariaDB REST API
 *
 * An enterprise-grade Database is provided as a Service (DBaaS) solution that can be managed through a browser-based \"Data Center Designer\" (DCD) tool or via an easy to use API.  The API allows you to create additional MariaDB database clusters or modify existing ones. It is designed to allow users to leverage the same power and flexibility found within the DCD visual tool. Both tools are consistent with their concepts and lend well to making the experience smooth and intuitive.
 *
 * API version: 0.1.0
 */

// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.

package ionoscloud

import (
	"encoding/json"
	"fmt"
)

// State The current status reported back by the cluster.
type State string

// List of State
const (
	STATE_AVAILABLE  State = "AVAILABLE"
	STATE_BUSY       State = "BUSY"
	STATE_CREATING   State = "CREATING"
	STATE_UPDATING   State = "UPDATING"
	STATE_RESTORING  State = "RESTORING"
	STATE_DESTROYING State = "DESTROYING"
	STATE_DEGRADED   State = "DEGRADED"
	STATE_FAILED     State = "FAILED"
	STATE_UNKNOWN    State = "UNKNOWN"
)

func (v *State) UnmarshalJSON(src []byte) error {
	var value string
	err := json.Unmarshal(src, &value)
	if err != nil {
		return err
	}
	enumTypeValue := State(value)
	for _, existing := range []State{"AVAILABLE", "BUSY", "CREATING", "UPDATING", "RESTORING", "DESTROYING", "DEGRADED", "FAILED", "UNKNOWN"} {
		if existing == enumTypeValue {
			*v = enumTypeValue
			return nil
		}
	}

	return fmt.Errorf("%+v is not a valid State", value)
}

// Ptr returns reference to State value
func (v State) Ptr() *State {
	return &v
}

type NullableState struct {
	value *State
	isSet bool
}

func (v NullableState) Get() *State {
	return v.value
}

func (v *NullableState) Set(val *State) {
	v.value = val
	v.isSet = true
}

func (v NullableState) IsSet() bool {
	return v.isSet
}

func (v *NullableState) Unset() {
	v.value = nil
	v.isSet = false
}

func NewNullableState(val *State) *NullableState {
	return &NullableState{value: val, isSet: true}
}

func (v NullableState) MarshalJSON() ([]byte, error) {
	return json.Marshal(v.value)
}

func (v *NullableState) UnmarshalJSON(src []byte) error {
	v.isSet = true
	return json.Unmarshal(src, &v.value)
}
