namespace InputEvent; enum KeyAction: byte { DOWN, UP, } table MouseMovement { movement_x: int16; movement_y: int16; } enum MouseButton: byte { LEFT, MIDDLE, RIGHT, X1, X2 } table MouseInput { button: MouseButton; button_action: KeyAction; } struct ModifierState { shift: bool; ctrl: bool; alt: bool; meta: bool; } table KeyboardInput { key_code: int16; key_action: KeyAction; modifiers: ModifierState; } union Input { Keyboard:KeyboardInput, MouseMovement:MouseMovement, MouseInput:MouseInput, } table InputEvent { input: Input; } root_type InputEvent;