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}