swaybar_types/
click.rs

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}