// Code generated by "enumer -type=BaseType -autotrimprefix -json"; DO NOT EDIT

package types

import (
	"encoding/json"
	"fmt"
)

const _BaseType_name = "UnknownInteger32OctetStringObjectIdentifierUnsigned32Integer64Unsigned64Float32Float64Float128EnumBitsPointer"

var _BaseType_index = [...]uint8{0, 7, 16, 27, 43, 53, 62, 72, 79, 86, 94, 98, 102, 109}

func (i BaseType) String() string {
	if i < 0 || i >= BaseType(len(_BaseType_index)-1) {
		return fmt.Sprintf("BaseType(%d)", i)
	}
	return _BaseType_name[_BaseType_index[i]:_BaseType_index[i+1]]
}

var _BaseTypeNameToValue_map = map[string]BaseType{
	_BaseType_name[0:7]:     0,
	_BaseType_name[7:16]:    1,
	_BaseType_name[16:27]:   2,
	_BaseType_name[27:43]:   3,
	_BaseType_name[43:53]:   4,
	_BaseType_name[53:62]:   5,
	_BaseType_name[62:72]:   6,
	_BaseType_name[72:79]:   7,
	_BaseType_name[79:86]:   8,
	_BaseType_name[86:94]:   9,
	_BaseType_name[94:98]:   10,
	_BaseType_name[98:102]:  11,
	_BaseType_name[102:109]: 12,
}

func BaseTypeFromString(s string) (BaseType, error) {
	if val, ok := _BaseTypeNameToValue_map[s]; ok {
		return val, nil
	}
	return 0, fmt.Errorf("%s does not belong to BaseType values", s)
}

func BaseTypeAsList() []BaseType {
	list := make([]BaseType, len(_BaseTypeNameToValue_map))
	idx := 0
	for _, v := range _BaseTypeNameToValue_map {
		list[idx] = v
		idx++
	}
	return list
}

func BaseTypeAsListString() []string {
	list := make([]string, len(_BaseTypeNameToValue_map))
	idx := 0
	for k := range _BaseTypeNameToValue_map {
		list[idx] = k
		idx++
	}
	return list
}

func BaseTypeIsValid(t BaseType) bool {
	for _, v := range BaseTypeAsList() {
		if t == v {
			return true
		}
	}
	return false
}

func (i BaseType) MarshalJSON() ([]byte, error) {
	return json.Marshal(i.String())
}

func (i *BaseType) UnmarshalJSON(data []byte) error {
	var s string
	if err := json.Unmarshal(data, &s); err != nil {
		return fmt.Errorf("BaseType should be a string, got %s", data)
	}

	var err error
	*i, err = BaseTypeFromString(s)
	return err
}
