1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
4pub struct Click {
5 pub name: Option<String>,
6 pub instance: Option<String>,
7 pub x: u32,
8 pub y: u32,
9 pub button: Button,
10 #[serde(default)]
11 pub event: u32,
12 pub relative_x: u32,
13 pub relative_y: u32,
14 pub width: u32,
15 pub height: u32,
16}
17
18#[repr(u32)]
19#[non_exhaustive]
20#[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize)]
21#[serde(from = "u32")]
22#[serde(into = "u32")]
23pub enum Button {
24 None,
25 Left,
26 Middle,
27 Right,
28 WheelUp,
29 WheelDown,
30 WheelLeft,
31 WheelRight,
32 Other(u32),
33}
34
35impl From<Button> for u32 {
36 fn from(button: Button) -> Self {
37 match button {
38 Button::None => 0,
39 Button::Left => 1,
40 Button::Middle => 2,
41 Button::Right => 3,
42 Button::WheelUp => 4,
43 Button::WheelDown => 5,
44 Button::WheelLeft => 6,
45 Button::WheelRight => 7,
46 Button::Other(u) => u,
47 }
48 }
49}
50
51impl From<u32> for Button {
52 fn from(value: u32) -> Self {
53 match value {
54 0 => Button::None,
55 1 => Button::Left,
56 2 => Button::Middle,
57 3 => Button::Right,
58 4 => Button::WheelUp,
59 5 => Button::WheelDown,
60 6 => Button::WheelLeft,
61 7 => Button::WheelRight,
62 v => Button::Other(v),
63 }
64 }
65}