Skip to main content

halley_ipc/
protocol.rs

1use serde::{Deserialize, Serialize};
2
3use crate::error::IpcError;
4use crate::types::{
5    BearingsStatusResponse, ClusterInfo, ClusterListResponse, NodeInfo, NodeListResponse,
6    OutputsResponse, TrailListResponse,
7};
8
9#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
10pub enum NodeMoveDirection {
11    Left,
12    Right,
13    Up,
14    Down,
15}
16
17#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
18pub enum TrailDirection {
19    Prev,
20    Next,
21}
22
23#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
24pub enum StackCycleDirection {
25    Forward,
26    Backward,
27}
28
29#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
30pub enum DpmsCommand {
31    Off,
32    On,
33    Toggle,
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize)]
37pub enum NodeSelector {
38    Focused,
39    Latest,
40    Id(u64),
41    Title(String),
42    App(String),
43}
44
45#[derive(Debug, Clone, Serialize, Deserialize)]
46pub enum TrailTarget {
47    Index(usize),
48    Selector(NodeSelector),
49}
50
51#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
52pub enum MonitorFocusDirection {
53    Left,
54    Right,
55    Up,
56    Down,
57}
58
59#[derive(Debug, Clone, Serialize, Deserialize)]
60pub enum MonitorFocusTarget {
61    Direction(MonitorFocusDirection),
62    Output(String),
63}
64
65#[derive(Debug, Clone, Serialize, Deserialize)]
66pub enum BearingsRequest {
67    Show,
68    Hide,
69    Toggle,
70    Status,
71}
72
73#[derive(Debug, Clone, Serialize, Deserialize)]
74pub enum StackRequest {
75    Cycle {
76        direction: StackCycleDirection,
77        output: Option<String>,
78    },
79}
80
81#[derive(Debug, Clone, Serialize, Deserialize)]
82pub enum TileRequest {
83    Focus {
84        direction: NodeMoveDirection,
85        output: Option<String>,
86    },
87    Swap {
88        direction: NodeMoveDirection,
89        output: Option<String>,
90    },
91}
92
93#[derive(Debug, Clone, Serialize, Deserialize)]
94pub enum ClusterTarget {
95    Current,
96    Id(u64),
97}
98
99#[derive(Debug, Clone, Serialize, Deserialize)]
100pub enum ClusterRequest {
101    List {
102        output: Option<String>,
103    },
104    Inspect {
105        target: Option<ClusterTarget>,
106        output: Option<String>,
107    },
108    LayoutCycle {
109        output: Option<String>,
110    },
111}
112
113#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
114pub enum CaptureMode {
115    Menu,
116    Region,
117    Screen,
118    Window,
119}
120
121#[derive(Debug, Clone, Serialize, Deserialize)]
122pub enum CaptureRequest {
123    Start {
124        mode: CaptureMode,
125        output: Option<String>,
126    },
127    Status,
128}
129
130#[derive(Debug, Clone, Serialize, Deserialize)]
131pub enum CompositorRequest {
132    Quit,
133    Reload,
134    Outputs,
135    ApertureStatus,
136    Dpms {
137        command: DpmsCommand,
138        output: Option<String>,
139    },
140}
141
142#[derive(Debug, Clone, Serialize, Deserialize)]
143pub enum NodeRequest {
144    List {
145        output: Option<String>,
146    },
147    Info {
148        selector: Option<NodeSelector>,
149        output: Option<String>,
150    },
151    Focus {
152        selector: Option<NodeSelector>,
153        output: Option<String>,
154    },
155    Move {
156        direction: NodeMoveDirection,
157        selector: Option<NodeSelector>,
158        output: Option<String>,
159    },
160    Close {
161        selector: Option<NodeSelector>,
162        output: Option<String>,
163    },
164}
165
166#[derive(Debug, Clone, Serialize, Deserialize)]
167pub enum TrailRequest {
168    Prev {
169        output: Option<String>,
170    },
171    Next {
172        output: Option<String>,
173    },
174    List {
175        output: Option<String>,
176    },
177    Goto {
178        target: TrailTarget,
179        output: Option<String>,
180    },
181}
182
183#[derive(Debug, Clone, Serialize, Deserialize)]
184pub enum MonitorRequest {
185    Focus(MonitorFocusTarget),
186}
187
188#[derive(Debug, Clone, Serialize, Deserialize)]
189pub enum Request {
190    Compositor(CompositorRequest),
191    Capture(CaptureRequest),
192    Node(NodeRequest),
193    Trail(TrailRequest),
194    Monitor(MonitorRequest),
195    Bearings(BearingsRequest),
196    Stack(StackRequest),
197    Tile(TileRequest),
198    Cluster(ClusterRequest),
199}
200
201#[derive(Debug, Clone, Serialize, Deserialize)]
202pub enum Response {
203    Ok,
204    Reloaded,
205    Outputs(OutputsResponse),
206    ApertureStatus(crate::types::ApertureStatusResponse),
207    CaptureStatus(crate::types::CaptureStatusResponse),
208    NodeList(NodeListResponse),
209    NodeInfo(NodeInfo),
210    ClusterList(ClusterListResponse),
211    ClusterInfo(ClusterInfo),
212    TrailList(TrailListResponse),
213    BearingsStatus(BearingsStatusResponse),
214    Error(IpcError),
215}