// Code generated by enum-generate.go DO NOT EDIT.

package models

import "gogs.mikescher.com/BlackForestBytes/goext/langext"

const ChecksumGenerator = "4bfd61daa179e1452035a34c25c6f8170a08500bc0a7aa0e3981f95ad4b0d7d2"

type Enum interface {
	Valid() bool
	ValuesAny() []any
	ValuesMeta() []EnumMetaValue
	VarName() string
}

type StringEnum interface {
	Enum
	String() string
}

type DescriptionEnum interface {
	Enum
	Description() string
}

type EnumMetaValue struct {
	VarName     string  `json:"varName"`
	Value       any     `json:"value"`
	Description *string `json:"description"`
}

// ================================ ClientType ================================
//
// File:       client.go
// StringEnum: true
// DescrEnum:  false
//

var __ClientTypeValues = []ClientType{
	ClientTypeAndroid,
	ClientTypeIOS,
}

var __ClientTypeVarnames = map[ClientType]string{
	ClientTypeAndroid: "ClientTypeAndroid",
	ClientTypeIOS:     "ClientTypeIOS",
}

func (e ClientType) Valid() bool {
	return langext.InArray(e, __ClientTypeValues)
}

func (e ClientType) Values() []ClientType {
	return __ClientTypeValues
}

func (e ClientType) ValuesAny() []any {
	return langext.ArrCastToAny(__ClientTypeValues)
}

func (e ClientType) ValuesMeta() []EnumMetaValue {
	return []EnumMetaValue{
		EnumMetaValue{VarName: "ClientTypeAndroid", Value: ClientTypeAndroid, Description: nil},
		EnumMetaValue{VarName: "ClientTypeIOS", Value: ClientTypeIOS, Description: nil},
	}
}

func (e ClientType) String() string {
	return string(e)
}

func (e ClientType) VarName() string {
	if d, ok := __ClientTypeVarnames[e]; ok {
		return d
	}
	return ""
}

func ParseClientType(vv string) (ClientType, bool) {
	for _, ev := range __ClientTypeValues {
		if string(ev) == vv {
			return ev, true
		}
	}
	return "", false
}

func ClientTypeValues() []ClientType {
	return __ClientTypeValues
}

func ClientTypeValuesMeta() []EnumMetaValue {
	return []EnumMetaValue{
		EnumMetaValue{VarName: "ClientTypeAndroid", Value: ClientTypeAndroid, Description: nil},
		EnumMetaValue{VarName: "ClientTypeIOS", Value: ClientTypeIOS, Description: nil},
	}
}

// ================================ DeliveryStatus ================================
//
// File:       delivery.go
// StringEnum: true
// DescrEnum:  false
//

var __DeliveryStatusValues = []DeliveryStatus{
	DeliveryStatusRetry,
	DeliveryStatusSuccess,
	DeliveryStatusFailed,
}

var __DeliveryStatusVarnames = map[DeliveryStatus]string{
	DeliveryStatusRetry:   "DeliveryStatusRetry",
	DeliveryStatusSuccess: "DeliveryStatusSuccess",
	DeliveryStatusFailed:  "DeliveryStatusFailed",
}

func (e DeliveryStatus) Valid() bool {
	return langext.InArray(e, __DeliveryStatusValues)
}

func (e DeliveryStatus) Values() []DeliveryStatus {
	return __DeliveryStatusValues
}

func (e DeliveryStatus) ValuesAny() []any {
	return langext.ArrCastToAny(__DeliveryStatusValues)
}

func (e DeliveryStatus) ValuesMeta() []EnumMetaValue {
	return []EnumMetaValue{
		EnumMetaValue{VarName: "DeliveryStatusRetry", Value: DeliveryStatusRetry, Description: nil},
		EnumMetaValue{VarName: "DeliveryStatusSuccess", Value: DeliveryStatusSuccess, Description: nil},
		EnumMetaValue{VarName: "DeliveryStatusFailed", Value: DeliveryStatusFailed, Description: nil},
	}
}

func (e DeliveryStatus) String() string {
	return string(e)
}

func (e DeliveryStatus) VarName() string {
	if d, ok := __DeliveryStatusVarnames[e]; ok {
		return d
	}
	return ""
}

func ParseDeliveryStatus(vv string) (DeliveryStatus, bool) {
	for _, ev := range __DeliveryStatusValues {
		if string(ev) == vv {
			return ev, true
		}
	}
	return "", false
}

func DeliveryStatusValues() []DeliveryStatus {
	return __DeliveryStatusValues
}

func DeliveryStatusValuesMeta() []EnumMetaValue {
	return []EnumMetaValue{
		EnumMetaValue{VarName: "DeliveryStatusRetry", Value: DeliveryStatusRetry, Description: nil},
		EnumMetaValue{VarName: "DeliveryStatusSuccess", Value: DeliveryStatusSuccess, Description: nil},
		EnumMetaValue{VarName: "DeliveryStatusFailed", Value: DeliveryStatusFailed, Description: nil},
	}
}

// ================================ TokenPerm ================================
//
// File:       keytoken.go
// StringEnum: true
// DescrEnum:  true
//

var __TokenPermValues = []TokenPerm{
	PermAdmin,
	PermChannelRead,
	PermChannelSend,
	PermUserRead,
}

var __TokenPermDescriptions = map[TokenPerm]string{
	PermAdmin:       "Edit userdata (+ includes all other permissions)",
	PermChannelRead: "Read messages",
	PermChannelSend: "Send messages",
	PermUserRead:    "Read userdata",
}

var __TokenPermVarnames = map[TokenPerm]string{
	PermAdmin:       "PermAdmin",
	PermChannelRead: "PermChannelRead",
	PermChannelSend: "PermChannelSend",
	PermUserRead:    "PermUserRead",
}

func (e TokenPerm) Valid() bool {
	return langext.InArray(e, __TokenPermValues)
}

func (e TokenPerm) Values() []TokenPerm {
	return __TokenPermValues
}

func (e TokenPerm) ValuesAny() []any {
	return langext.ArrCastToAny(__TokenPermValues)
}

func (e TokenPerm) ValuesMeta() []EnumMetaValue {
	return []EnumMetaValue{
		EnumMetaValue{VarName: "PermAdmin", Value: PermAdmin, Description: langext.Ptr("Edit userdata (+ includes all other permissions)")},
		EnumMetaValue{VarName: "PermChannelRead", Value: PermChannelRead, Description: langext.Ptr("Read messages")},
		EnumMetaValue{VarName: "PermChannelSend", Value: PermChannelSend, Description: langext.Ptr("Send messages")},
		EnumMetaValue{VarName: "PermUserRead", Value: PermUserRead, Description: langext.Ptr("Read userdata")},
	}
}

func (e TokenPerm) String() string {
	return string(e)
}

func (e TokenPerm) Description() string {
	if d, ok := __TokenPermDescriptions[e]; ok {
		return d
	}
	return ""
}

func (e TokenPerm) VarName() string {
	if d, ok := __TokenPermVarnames[e]; ok {
		return d
	}
	return ""
}

func ParseTokenPerm(vv string) (TokenPerm, bool) {
	for _, ev := range __TokenPermValues {
		if string(ev) == vv {
			return ev, true
		}
	}
	return "", false
}

func TokenPermValues() []TokenPerm {
	return __TokenPermValues
}

func TokenPermValuesMeta() []EnumMetaValue {
	return []EnumMetaValue{
		EnumMetaValue{VarName: "PermAdmin", Value: PermAdmin, Description: langext.Ptr("Edit userdata (+ includes all other permissions)")},
		EnumMetaValue{VarName: "PermChannelRead", Value: PermChannelRead, Description: langext.Ptr("Read messages")},
		EnumMetaValue{VarName: "PermChannelSend", Value: PermChannelSend, Description: langext.Ptr("Send messages")},
		EnumMetaValue{VarName: "PermUserRead", Value: PermUserRead, Description: langext.Ptr("Read userdata")},
	}
}
