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}