// generated by stringer -output binres_string.go -type ResType,DataType; DO NOT EDIT

package binres

import "fmt"

const (
	_ResType_name_0 = "ResNullResStringPoolResTableResXML"
	_ResType_name_1 = "ResXMLStartNamespaceResXMLEndNamespaceResXMLStartElementResXMLEndElementResXMLCharData"
	_ResType_name_2 = "ResXMLResourceMap"
	_ResType_name_3 = "ResTablePackageResTableTypeResTableTypeSpecResTableLibrary"
)

var (
	_ResType_index_0 = [...]uint8{7, 20, 28, 34}
	_ResType_index_1 = [...]uint8{20, 38, 56, 72, 86}
	_ResType_index_2 = [...]uint8{17}
	_ResType_index_3 = [...]uint8{15, 27, 43, 58}
)

func (i ResType) String() string {
	switch {
	case 0 <= i && i <= 3:
		lo := uint8(0)
		if i > 0 {
			lo = _ResType_index_0[i-1]
		}
		return _ResType_name_0[lo:_ResType_index_0[i]]
	case 256 <= i && i <= 260:
		i -= 256
		lo := uint8(0)
		if i > 0 {
			lo = _ResType_index_1[i-1]
		}
		return _ResType_name_1[lo:_ResType_index_1[i]]
	case i == 384:
		return _ResType_name_2
	case 512 <= i && i <= 515:
		i -= 512
		lo := uint8(0)
		if i > 0 {
			lo = _ResType_index_3[i-1]
		}
		return _ResType_name_3[lo:_ResType_index_3[i]]
	default:
		return fmt.Sprintf("ResType(%d)", i)
	}
}

const (
	_DataType_name_0 = "DataNullDataReferenceDataAttributeDataStringDataFloatDataDimensionDataFractionDataDynamicReference"
	_DataType_name_1 = "DataIntDecDataIntHexDataIntBool"
	_DataType_name_2 = "DataIntColorARGB8DataIntColorRGB8DataIntColorARGB4DataIntColorRGB4"
)

var (
	_DataType_index_0 = [...]uint8{8, 21, 34, 44, 53, 66, 78, 98}
	_DataType_index_1 = [...]uint8{10, 20, 31}
	_DataType_index_2 = [...]uint8{17, 33, 50, 66}
)

func (i DataType) String() string {
	switch {
	case 0 <= i && i <= 7:
		lo := uint8(0)
		if i > 0 {
			lo = _DataType_index_0[i-1]
		}
		return _DataType_name_0[lo:_DataType_index_0[i]]
	case 16 <= i && i <= 18:
		i -= 16
		lo := uint8(0)
		if i > 0 {
			lo = _DataType_index_1[i-1]
		}
		return _DataType_name_1[lo:_DataType_index_1[i]]
	case 28 <= i && i <= 31:
		i -= 28
		lo := uint8(0)
		if i > 0 {
			lo = _DataType_index_2[i-1]
		}
		return _DataType_name_2[lo:_DataType_index_2[i]]
	default:
		return fmt.Sprintf("DataType(%d)", i)
	}
}
