hyprshell_core_lib/
data.rs

1pub type WorkspaceId = i32;
2pub type MonitorId = i128;
3pub type ClientId = u64;
4
5#[derive(Debug, Clone, Copy)]
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    pub enabled: bool,
20}
21
22#[derive(Debug, Clone)]
23pub struct WorkspaceData {
24    pub name: String,
25    pub x: i32,
26    pub y: i32,
27    pub width: u16,
28    pub height: u16,
29    pub monitor: MonitorId,
30    pub enabled: bool,
31}
32
33#[derive(Debug, Clone)]
34pub struct ClientData {
35    pub x: i16,
36    pub y: i16,
37    pub width: i16,
38    pub height: i16,
39    pub class: String,
40    pub title: String,
41    pub workspace: WorkspaceId,
42    pub monitor: MonitorId,
43    pub focus_history_id: i8,
44    pub floating: bool,
45    pub enabled: bool,
46    pub pid: i32,
47}
48
49#[derive(Debug, Default)]
50pub struct HyprlandData {
51    pub clients: Vec<(ClientId, ClientData)>,
52    pub workspaces: Vec<(WorkspaceId, WorkspaceData)>,
53    pub monitors: Vec<(MonitorId, MonitorData)>,
54}
55
56pub trait FindByFirst<ID, Data> {
57    fn find_by_first(&self, id: &ID) -> Option<&Data>;
58}
59
60impl FindByFirst<ClientId, ClientData> for [(ClientId, ClientData)] {
61    fn find_by_first(&self, id: &ClientId) -> Option<&ClientData> {
62        self.iter().find(|(addr, _)| *addr == *id).map(|(_, cd)| cd)
63    }
64}
65
66impl FindByFirst<WorkspaceId, WorkspaceData> for [(WorkspaceId, WorkspaceData)] {
67    fn find_by_first(&self, id: &WorkspaceId) -> Option<&WorkspaceData> {
68        self.iter().find(|(wid, _)| *wid == *id).map(|(_, wd)| wd)
69    }
70}
71
72impl FindByFirst<MonitorId, MonitorData> for [(MonitorId, MonitorData)] {
73    fn find_by_first(&self, id: &MonitorId) -> Option<&MonitorData> {
74        self.iter().find(|(mid, _)| *mid == *id).map(|(_, md)| md)
75    }
76}
77
78pub enum IdOverride {
79    ClientId(ClientId),
80    WorkspaceID(WorkspaceId),
81}