Skip to content

Commit

Permalink
add ImguiKeyProxy enum to use with serde remote
Browse files Browse the repository at this point in the history
  • Loading branch information
ruby3141 committed Mar 27, 2024
1 parent 60e2a85 commit be647bb
Show file tree
Hide file tree
Showing 2 changed files with 176 additions and 1 deletion.
1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ path = "src/main.rs"

[dependencies]
hudhook = "0.6.1"
serde_with = "3.7.0"
serde_yaml = "0.9.33"

[dependencies.imgui]
Expand Down
176 changes: 175 additions & 1 deletion src/configs/config_enums.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,182 @@
use serde::{Serialize, Deserialize};
use imgui::{Key, sys};
use serde::{Serialize, Serializer, Deserialize, Deserializer};
use serde_with::{SerializeAs, DeserializeAs};

#[derive(Serialize, Deserialize)]
pub enum LaneDirection {
Left,
Center,
Right
}

// imgui::Key doesn't support serde.
// https://github.com/imgui-rs/imgui-rs/issues/769
#[repr(u32)]
#[derive(Serialize, Deserialize)]
#[serde(remote="Key")]
#[non_exhaustive]
pub enum ImguiKeyProxy {
Tab = sys::ImGuiKey_Tab,
LeftArrow = sys::ImGuiKey_LeftArrow,
RightArrow = sys::ImGuiKey_RightArrow,
UpArrow = sys::ImGuiKey_UpArrow,
DownArrow = sys::ImGuiKey_DownArrow,
PageUp = sys::ImGuiKey_PageUp,
PageDown = sys::ImGuiKey_PageDown,
Home = sys::ImGuiKey_Home,
End = sys::ImGuiKey_End,
Insert = sys::ImGuiKey_Insert,
Delete = sys::ImGuiKey_Delete,
Backspace = sys::ImGuiKey_Backspace,
Space = sys::ImGuiKey_Space,
Enter = sys::ImGuiKey_Enter,
Escape = sys::ImGuiKey_Escape,
LeftCtrl = sys::ImGuiKey_LeftCtrl,
LeftShift = sys::ImGuiKey_LeftShift,
LeftAlt = sys::ImGuiKey_LeftAlt,
LeftSuper = sys::ImGuiKey_LeftSuper,
RightCtrl = sys::ImGuiKey_RightCtrl,
RightShift = sys::ImGuiKey_RightShift,
RightAlt = sys::ImGuiKey_RightAlt,
RightSuper = sys::ImGuiKey_RightSuper,
Menu = sys::ImGuiKey_Menu,
Alpha0 = sys::ImGuiKey_0,
Alpha1 = sys::ImGuiKey_1,
Alpha2 = sys::ImGuiKey_2,
Alpha3 = sys::ImGuiKey_3,
Alpha4 = sys::ImGuiKey_4,
Alpha5 = sys::ImGuiKey_5,
Alpha6 = sys::ImGuiKey_6,
Alpha7 = sys::ImGuiKey_7,
Alpha8 = sys::ImGuiKey_8,
Alpha9 = sys::ImGuiKey_9,
A = sys::ImGuiKey_A,
B = sys::ImGuiKey_B,
C = sys::ImGuiKey_C,
D = sys::ImGuiKey_D,
E = sys::ImGuiKey_E,
F = sys::ImGuiKey_F,
G = sys::ImGuiKey_G,
H = sys::ImGuiKey_H,
I = sys::ImGuiKey_I,
J = sys::ImGuiKey_J,
K = sys::ImGuiKey_K,
L = sys::ImGuiKey_L,
M = sys::ImGuiKey_M,
N = sys::ImGuiKey_N,
O = sys::ImGuiKey_O,
P = sys::ImGuiKey_P,
Q = sys::ImGuiKey_Q,
R = sys::ImGuiKey_R,
S = sys::ImGuiKey_S,
T = sys::ImGuiKey_T,
U = sys::ImGuiKey_U,
V = sys::ImGuiKey_V,
W = sys::ImGuiKey_W,
X = sys::ImGuiKey_X,
Y = sys::ImGuiKey_Y,
Z = sys::ImGuiKey_Z,
F1 = sys::ImGuiKey_F1,
F2 = sys::ImGuiKey_F2,
F3 = sys::ImGuiKey_F3,
F4 = sys::ImGuiKey_F4,
F5 = sys::ImGuiKey_F5,
F6 = sys::ImGuiKey_F6,
F7 = sys::ImGuiKey_F7,
F8 = sys::ImGuiKey_F8,
F9 = sys::ImGuiKey_F9,
F10 = sys::ImGuiKey_F10,
F11 = sys::ImGuiKey_F11,
F12 = sys::ImGuiKey_F12,
Apostrophe = sys::ImGuiKey_Apostrophe,
Comma = sys::ImGuiKey_Comma,
Minus = sys::ImGuiKey_Minus,
Period = sys::ImGuiKey_Period,
Slash = sys::ImGuiKey_Slash,
Semicolon = sys::ImGuiKey_Semicolon,
Equal = sys::ImGuiKey_Equal,
LeftBracket = sys::ImGuiKey_LeftBracket,
Backslash = sys::ImGuiKey_Backslash,
RightBracket = sys::ImGuiKey_RightBracket,
GraveAccent = sys::ImGuiKey_GraveAccent,
CapsLock = sys::ImGuiKey_CapsLock,
ScrollLock = sys::ImGuiKey_ScrollLock,
NumLock = sys::ImGuiKey_NumLock,
PrintScreen = sys::ImGuiKey_PrintScreen,
Pause = sys::ImGuiKey_Pause,
Keypad0 = sys::ImGuiKey_Keypad0,
Keypad1 = sys::ImGuiKey_Keypad1,
Keypad2 = sys::ImGuiKey_Keypad2,
Keypad3 = sys::ImGuiKey_Keypad3,
Keypad4 = sys::ImGuiKey_Keypad4,
Keypad5 = sys::ImGuiKey_Keypad5,
Keypad6 = sys::ImGuiKey_Keypad6,
Keypad7 = sys::ImGuiKey_Keypad7,
Keypad8 = sys::ImGuiKey_Keypad8,
Keypad9 = sys::ImGuiKey_Keypad9,
KeypadDecimal = sys::ImGuiKey_KeypadDecimal,
KeypadDivide = sys::ImGuiKey_KeypadDivide,
KeypadMultiply = sys::ImGuiKey_KeypadMultiply,
KeypadSubtract = sys::ImGuiKey_KeypadSubtract,
KeypadAdd = sys::ImGuiKey_KeypadAdd,
KeypadEnter = sys::ImGuiKey_KeypadEnter,
KeypadEqual = sys::ImGuiKey_KeypadEqual,
GamepadStart = sys::ImGuiKey_GamepadStart,
GamepadBack = sys::ImGuiKey_GamepadBack,
GamepadFaceLeft = sys::ImGuiKey_GamepadFaceLeft,
GamepadFaceRight = sys::ImGuiKey_GamepadFaceRight,
GamepadFaceUp = sys::ImGuiKey_GamepadFaceUp,
GamepadFaceDown = sys::ImGuiKey_GamepadFaceDown,
GamepadDpadLeft = sys::ImGuiKey_GamepadDpadLeft,
GamepadDpadRight = sys::ImGuiKey_GamepadDpadRight,
GamepadDpadUp = sys::ImGuiKey_GamepadDpadUp,
GamepadDpadDown = sys::ImGuiKey_GamepadDpadDown,
GamepadL1 = sys::ImGuiKey_GamepadL1,
GamepadR1 = sys::ImGuiKey_GamepadR1,
GamepadL2 = sys::ImGuiKey_GamepadL2,
GamepadR2 = sys::ImGuiKey_GamepadR2,
GamepadL3 = sys::ImGuiKey_GamepadL3,
GamepadR3 = sys::ImGuiKey_GamepadR3,
GamepadLStickLeft = sys::ImGuiKey_GamepadLStickLeft,
GamepadLStickRight = sys::ImGuiKey_GamepadLStickRight,
GamepadLStickUp = sys::ImGuiKey_GamepadLStickUp,
GamepadLStickDown = sys::ImGuiKey_GamepadLStickDown,
GamepadRStickLeft = sys::ImGuiKey_GamepadRStickLeft,
GamepadRStickRight = sys::ImGuiKey_GamepadRStickRight,
GamepadRStickUp = sys::ImGuiKey_GamepadRStickUp,
GamepadRStickDown = sys::ImGuiKey_GamepadRStickDown,
MouseLeft = sys::ImGuiKey_MouseLeft,
MouseRight = sys::ImGuiKey_MouseRight,
MouseMiddle = sys::ImGuiKey_MouseMiddle,
MouseX1 = sys::ImGuiKey_MouseX1,
MouseX2 = sys::ImGuiKey_MouseX2,
MouseWheelX = sys::ImGuiKey_MouseWheelX,
MouseWheelY = sys::ImGuiKey_MouseWheelY,
ReservedForModCtrl = sys::ImGuiKey_ReservedForModCtrl,
ReservedForModShift = sys::ImGuiKey_ReservedForModShift,
ReservedForModAlt = sys::ImGuiKey_ReservedForModAlt,
ReservedForModSuper = sys::ImGuiKey_ReservedForModSuper,
ModCtrl = sys::ImGuiMod_Ctrl,
ModShift = sys::ImGuiMod_Shift,
ModAlt = sys::ImGuiMod_Alt,
ModSuper = sys::ImGuiMod_Super,
ModShortcut = sys::ImGuiMod_Shortcut,
}

impl SerializeAs<Key> for ImguiKeyProxy {
fn serialize_as<S>(value: &Key, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
ImguiKeyProxy::serialize(value, serializer)
}
}

impl<'de> DeserializeAs<'de, Key> for ImguiKeyProxy {
fn deserialize_as<D>(deserializer: D) -> Result<Key, D::Error>
where
D: Deserializer<'de>,
{
ImguiKeyProxy::deserialize(deserializer)
}
}

0 comments on commit be647bb

Please sign in to comment.