Skip to main content

halley_api/
protocol.rs

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}