// 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"
)

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}
)

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]]
	default:
		return fmt.Sprintf("Code(%d)", i)
	}
}
