/*
DM OpenAPI DOC

No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)

API version: 6.0.0
*/

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

package dm

import (
	"encoding/json"
	"fmt"
)

// TaskShardMode the way to coordinate DDL
type TaskShardMode string

// List of Task_shard_mode
const (
	TASKSHARDMODE_PESSIMISTIC TaskShardMode = "pessimistic"
	TASKSHARDMODE_OPTIMISTIC  TaskShardMode = "optimistic"
)

// All allowed values of TaskShardMode enum
var AllowedTaskShardModeEnumValues = []TaskShardMode{
	"pessimistic",
	"optimistic",
}

func (v *TaskShardMode) UnmarshalJSON(src []byte) error {
	var value string
	err := json.Unmarshal(src, &value)
	if err != nil {
		return err
	}
	enumTypeValue := TaskShardMode(value)
	for _, existing := range AllowedTaskShardModeEnumValues {
		if existing == enumTypeValue {
			*v = enumTypeValue
			return nil
		}
	}

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

// NewTaskShardModeFromValue returns a pointer to a valid TaskShardMode
// for the value passed as argument, or an error if the value passed is not allowed by the enum
func NewTaskShardModeFromValue(v string) (*TaskShardMode, error) {
	ev := TaskShardMode(v)
	if ev.IsValid() {
		return &ev, nil
	} else {
		return nil, fmt.Errorf("invalid value '%v' for TaskShardMode: valid values are %v", v, AllowedTaskShardModeEnumValues)
	}
}

// IsValid return true if the value is valid for the enum, false otherwise
func (v TaskShardMode) IsValid() bool {
	for _, existing := range AllowedTaskShardModeEnumValues {
		if existing == v {
			return true
		}
	}
	return false
}

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

type NullableTaskShardMode struct {
	value *TaskShardMode
	isSet bool
}

func (v NullableTaskShardMode) Get() *TaskShardMode {
	return v.value
}

func (v *NullableTaskShardMode) Set(val *TaskShardMode) {
	v.value = val
	v.isSet = true
}

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

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

func NewNullableTaskShardMode(val *TaskShardMode) *NullableTaskShardMode {
	return &NullableTaskShardMode{value: val, isSet: true}
}

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

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