1use serde::{Deserialize, Serialize};
2
3use crate::error::ApiError;
4use crate::types::{
5 BearingsStatusResponse, ClusterInfo, ClusterListResponse, NodeInfo, NodeListResponse,
6 OutputsResponse, RailStatusResponse, 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 RailRequest {
136 Status { output: Option<String> },
137 FocusReveal { node_id: u64 },
138 TogglePin { node_id: u64 },
139 Close { node_id: u64 },
140}
141
142#[derive(Debug, Clone, Serialize, Deserialize)]
143pub enum CompositorRequest {
144 Quit,
145 Reload,
146 Outputs,
147 ApertureStatus,
148 Dpms {
149 command: DpmsCommand,
150 output: Option<String>,
151 },
152 Version,
153}
154
155#[derive(Debug, Clone, Serialize, Deserialize)]
156pub enum NodeRequest {
157 List {
158 output: Option<String>,
159 },
160 Info {
161 selector: Option<NodeSelector>,
162 output: Option<String>,
163 },
164 Focus {
165 selector: Option<NodeSelector>,
166 output: Option<String>,
167 },
168 Move {
169 direction: NodeMoveDirection,
170 selector: Option<NodeSelector>,
171 output: Option<String>,
172 },
173 Close {
174 selector: Option<NodeSelector>,
175 output: Option<String>,
176 },
177}
178
179#[derive(Debug, Clone, Serialize, Deserialize)]
180pub enum TrailRequest {
181 Prev {
182 output: Option<String>,
183 },
184 Next {
185 output: Option<String>,
186 },
187 List {
188 output: Option<String>,
189 },
190 Goto {
191 target: TrailTarget,
192 output: Option<String>,
193 },
194}
195
196#[derive(Debug, Clone, Serialize, Deserialize)]
197pub enum MonitorRequest {
198 Focus(MonitorFocusTarget),
199}
200
201#[derive(Debug, Clone, Serialize, Deserialize)]
202pub enum Request {
203 Compositor(CompositorRequest),
204 Capture(CaptureRequest),
205 Node(NodeRequest),
206 Trail(TrailRequest),
207 Monitor(MonitorRequest),
208 Bearings(BearingsRequest),
209 Stack(StackRequest),
210 Tile(TileRequest),
211 Cluster(ClusterRequest),
212 Rail(RailRequest),
213}
214
215#[derive(Debug, Clone, Serialize, Deserialize)]
216pub enum Response {
217 Ok,
218 Reloaded,
219 Outputs(OutputsResponse),
220 ApertureStatus(crate::types::ApertureStatusResponse),
221 CaptureStatus(crate::types::CaptureStatusResponse),
222 NodeList(NodeListResponse),
223 NodeInfo(NodeInfo),
224 ClusterList(ClusterListResponse),
225 ClusterInfo(ClusterInfo),
226 TrailList(TrailListResponse),
227 BearingsStatus(BearingsStatusResponse),
228 RailStatus(RailStatusResponse),
229 Error(ApiError),
230 Version(crate::types::VersionInfo),
231}