// Code generated by "stringer -type=Code"; DO NOT EDIT

package key

import "fmt"

const (
	_Code_name_0 = "CodeUnknown"
	_Code_name_1 = "CodeACodeBCodeCCodeDCodeECodeFCodeGCodeHCodeICodeJCodeKCodeLCodeMCodeNCodeOCodePCodeQCodeRCodeSCodeTCodeUCodeVCodeWCodeXCodeYCodeZCode1Code2Code3Code4Code5Code6Code7Code8Code9Code0CodeReturnEnterCodeEscapeCodeDeleteBackspaceCodeTabCodeSpacebarCodeHyphenMinusCodeEqualSignCodeLeftSquareBracketCodeRightSquareBracketCodeBackslash"
	_Code_name_2 = "CodeSemicolonCodeApostropheCodeGraveAccentCodeCommaCodeFullStopCodeSlashCodeCapsLockCodeF1CodeF2CodeF3CodeF4CodeF5CodeF6CodeF7CodeF8CodeF9CodeF10CodeF11CodeF12"
	_Code_name_3 = "CodePauseCodeInsertCodeHomeCodePageUpCodeDeleteForwardCodeEndCodePageDownCodeRightArrowCodeLeftArrowCodeDownArrowCodeUpArrowCodeKeypadNumLockCodeKeypadSlashCodeKeypadAsteriskCodeKeypadHyphenMinusCodeKeypadPlusSignCodeKeypadEnterCodeKeypad1CodeKeypad2CodeKeypad3CodeKeypad4CodeKeypad5CodeKeypad6CodeKeypad7CodeKeypad8CodeKeypad9CodeKeypad0CodeKeypadFullStop"
	_Code_name_4 = "CodeKeypadEqualSignCodeF13CodeF14CodeF15CodeF16CodeF17CodeF18CodeF19CodeF20CodeF21CodeF22CodeF23CodeF24"
	_Code_name_5 = "CodeHelp"
	_Code_name_6 = "CodeMuteCodeVolumeUpCodeVolumeDown"
	_Code_name_7 = "CodeLeftControlCodeLeftShiftCodeLeftAltCodeLeftGUICodeRightControlCodeRightShiftCodeRightAltCodeRightGUI"
	_Code_name_8 = "CodeCompose"
)

var (
	_Code_index_0 = [...]uint8{0, 11}
	_Code_index_1 = [...]uint16{0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125, 130, 135, 140, 145, 150, 155, 160, 165, 170, 175, 180, 195, 205, 224, 231, 243, 258, 271, 292, 314, 327}
	_Code_index_2 = [...]uint8{0, 13, 27, 42, 51, 63, 72, 84, 90, 96, 102, 108, 114, 120, 126, 132, 138, 145, 152, 159}
	_Code_index_3 = [...]uint16{0, 9, 19, 27, 37, 54, 61, 73, 87, 100, 113, 124, 141, 156, 174, 195, 213, 228, 239, 250, 261, 272, 283, 294, 305, 316, 327, 338, 356}
	_Code_index_4 = [...]uint8{0, 19, 26, 33, 40, 47, 54, 61, 68, 75, 82, 89, 96, 103}
	_Code_index_5 = [...]uint8{0, 8}
	_Code_index_6 = [...]uint8{0, 8, 20, 34}
	_Code_index_7 = [...]uint8{0, 15, 28, 39, 50, 66, 80, 92, 104}
	_Code_index_8 = [...]uint8{0, 11}
)

func (i Code) String() string {
	switch {
	case i == 0:
		return _Code_name_0
	case 4 <= i && i <= 49:
		i -= 4
		return _Code_name_1[_Code_index_1[i]:_Code_index_1[i+1]]
	case 51 <= i && i <= 69:
		i -= 51
		return _Code_name_2[_Code_index_2[i]:_Code_index_2[i+1]]
	case 72 <= i && i <= 99:
		i -= 72
		return _Code_name_3[_Code_index_3[i]:_Code_index_3[i+1]]
	case 103 <= i && i <= 115:
		i -= 103
		return _Code_name_4[_Code_index_4[i]:_Code_index_4[i+1]]
	case i == 117:
		return _Code_name_5
	case 127 <= i && i <= 129:
		i -= 127
		return _Code_name_6[_Code_index_6[i]:_Code_index_6[i+1]]
	case 224 <= i && i <= 231:
		i -= 224
		return _Code_name_7[_Code_index_7[i]:_Code_index_7[i+1]]
	case i == 65536:
		return _Code_name_8
	default:
		return fmt.Sprintf("Code(%d)", i)
	}
}
