hyprshell_core_lib/
data.rs1pub type WorkspaceId = i32;
2pub type MonitorId = i128;
3pub type ClientId = u64;
4
5#[derive(Debug, Clone, Copy, Eq, PartialEq)]
6pub struct Active {
7 pub client: Option<ClientId>,
8 pub workspace: WorkspaceId,
9 pub monitor: MonitorId,
10}
11
12#[derive(Debug, Clone)]
13pub struct MonitorData {
14 pub x: i32,
15 pub y: i32,
16 pub width: u16,
17 pub height: u16,
18 pub connector: String,
19}
20
21#[derive(Debug, Clone)]
22pub struct WorkspaceData {
23 pub name: String,
24 pub x: i32,
25 pub y: i32,
26 pub width: u16,
27 pub height: u16,
28 pub monitor: MonitorId,
29 pub any_client_enabled: bool,
30}
31
32#[derive(Debug, Clone)]
33pub struct ClientData {
34 pub x: i16,
35 pub y: i16,
36 pub width: i16,
37 pub height: i16,
38 pub class: String,
39 pub title: String,
40 pub workspace: WorkspaceId,
41 pub monitor: MonitorId,
42 pub focus_history_id: i8,
43 pub floating: bool,
44 pub enabled: bool,
45 pub pid: i32,
46}
47
48#[derive(Debug, Default)]
49pub struct HyprlandData {
50 pub clients: Vec<(ClientId, ClientData)>,
51 pub workspaces: Vec<(WorkspaceId, WorkspaceData)>,
52 pub monitors: Vec<(MonitorId, MonitorData)>,
53}
54
55pub trait FindByFirst<ID, Data> {
56 fn find_by_first(&self, id: &ID) -> Option<&Data>;
57}
58
59impl FindByFirst<ClientId, ClientData> for [(ClientId, ClientData)] {
60 fn find_by_first(&self, id: &ClientId) -> Option<&ClientData> {
61 self.iter().find(|(addr, _)| *addr == *id).map(|(_, cd)| cd)
62 }
63}
64
65impl FindByFirst<WorkspaceId, WorkspaceData> for [(WorkspaceId, WorkspaceData)] {
66 fn find_by_first(&self, id: &WorkspaceId) -> Option<&WorkspaceData> {
67 self.iter().find(|(wid, _)| *wid == *id).map(|(_, wd)| wd)
68 }
69}
70
71impl FindByFirst<MonitorId, MonitorData> for [(MonitorId, MonitorData)] {
72 fn find_by_first(&self, id: &MonitorId) -> Option<&MonitorData> {
73 self.iter().find(|(mid, _)| *mid == *id).map(|(_, md)| md)
74 }
75}