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    Slot {
112        slot: u8,
113        output: Option<String>,
114    },
115}
116
117#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
118pub enum CaptureMode {
119    Menu,
120    Region,
121    Screen,
122    Window,
123}
124
125#[derive(Debug, Clone, Serialize, Deserialize)]
126pub enum CaptureRequest {
127    Start {
128        mode: CaptureMode,
129        output: Option<String>,
130    },
131    Status,
132}
133
134#[derive(Debug, Clone, Serialize, Deserialize)]
135pub enum CompositorRequest {
136    Quit,
137    Reload,
138    Outputs,
139    ApertureStatus,
140    Dpms {
141        command: DpmsCommand,
142        output: Option<String>,
143    },
144}
145
146#[derive(Debug, Clone, Serialize, Deserialize)]
147pub enum NodeRequest {
148    List {
149        output: Option<String>,
150    },
151    Info {
152        selector: Option<NodeSelector>,
153        output: Option<String>,
154    },
155    Focus {
156        selector: Option<NodeSelector>,
157        output: Option<String>,
158    },
159    Move {
160        direction: NodeMoveDirection,
161        selector: Option<NodeSelector>,
162        output: Option<String>,
163    },
164    Close {
165        selector: Option<NodeSelector>,
166        output: Option<String>,
167    },
168}
169
170#[derive(Debug, Clone, Serialize, Deserialize)]
171pub enum TrailRequest {
172    Prev {
173        output: Option<String>,
174    },
175    Next {
176        output: Option<String>,
177    },
178    List {
179        output: Option<String>,
180    },
181    Goto {
182        target: TrailTarget,
183        output: Option<String>,
184    },
185}
186
187#[derive(Debug, Clone, Serialize, Deserialize)]
188pub enum MonitorRequest {
189    Focus(MonitorFocusTarget),
190}
191
192#[derive(Debug, Clone, Serialize, Deserialize)]
193pub enum Request {
194    Compositor(CompositorRequest),
195    Capture(CaptureRequest),
196    Node(NodeRequest),
197    Trail(TrailRequest),
198    Monitor(MonitorRequest),
199    Bearings(BearingsRequest),
200    Stack(StackRequest),
201    Tile(TileRequest),
202    Cluster(ClusterRequest),
203}
204
205#[derive(Debug, Clone, Serialize, Deserialize)]
206pub enum Response {
207    Ok,
208    Reloaded,
209    Outputs(OutputsResponse),
210    ApertureStatus(crate::types::ApertureStatusResponse),
211    CaptureStatus(crate::types::CaptureStatusResponse),
212    NodeList(NodeListResponse),
213    NodeInfo(NodeInfo),
214    ClusterList(ClusterListResponse),
215    ClusterInfo(ClusterInfo),
216    TrailList(TrailListResponse),
217    BearingsStatus(BearingsStatusResponse),
218    Error(IpcError),
219}