// Code generated by the FlatBuffers compiler. DO NOT EDIT.

package optional_scalars

import "strconv"

type OptionalByte int8

const (
	OptionalByteNone OptionalByte = 0
	OptionalByteOne  OptionalByte = 1
	OptionalByteTwo  OptionalByte = 2
)

var EnumNamesOptionalByte = map[OptionalByte]string{
	OptionalByteNone: "None",
	OptionalByteOne:  "One",
	OptionalByteTwo:  "Two",
}

var EnumValuesOptionalByte = map[string]OptionalByte{
	"None": OptionalByteNone,
	"One":  OptionalByteOne,
	"Two":  OptionalByteTwo,
}

func (v OptionalByte) String() string {
	if s, ok := EnumNamesOptionalByte[v]; ok {
		return s
	}
	return "OptionalByte(" + strconv.FormatInt(int64(v), 10) + ")"
}
