steamroom_cli/daemon/proto/
request.rs1use super::JobId;
2use super::params::*;
3use rkyv::Archive;
4use rkyv::Deserialize;
5use rkyv::Serialize;
6
7#[derive(Archive, Serialize, Deserialize, Debug, Clone)]
8#[rkyv(derive(Debug))]
9pub enum Request {
10 Download {
11 args: DownloadParams,
12 priority: bool,
13 },
14 Info {
15 args: InfoParams,
16 priority: bool,
17 },
18 Files {
19 args: FilesParams,
20 priority: bool,
21 },
22 Manifests {
23 args: ManifestsParams,
24 priority: bool,
25 },
26 Diff {
27 args: DiffParams,
28 priority: bool,
29 },
30 Packages {
31 args: PackagesParams,
32 priority: bool,
33 },
34 SaveManifest {
35 args: SaveManifestParams,
36 priority: bool,
37 },
38 Workshop {
39 args: WorkshopParams,
40 priority: bool,
41 },
42 LocalInfo {
43 args: LocalInfoParams,
44 priority: bool,
45 },
46
47 Status,
48 Subscribe,
49 Attach {
50 job_id: JobId,
51 },
52 Cancel {
53 job_id: JobId,
54 },
55 TogglePriority {
56 job_id: JobId,
57 },
58 Stop {
59 force: bool,
60 },
61}
62
63#[cfg(test)]
64mod tests {
65 use super::super::OutputFormat;
66 use super::*;
67 use rkyv::rancor;
68
69 #[test]
70 fn info_request_round_trips() {
71 let req = Request::Info {
72 args: InfoParams {
73 app: 480,
74 format: Some(OutputFormat::Json),
75 os: None,
76 show_all: false,
77 },
78 priority: true,
79 };
80 let bytes = rkyv::to_bytes::<rancor::Error>(&req).unwrap();
81 let back = rkyv::from_bytes::<Request, rancor::Error>(&bytes).unwrap();
82 match back {
83 Request::Info { args, priority } => {
84 assert_eq!(args.app, 480);
85 assert!(priority);
86 }
87 other => panic!("wrong variant: {other:?}"),
88 }
89 }
90
91 #[test]
92 fn control_requests_round_trip() {
93 for req in [
94 Request::Status,
95 Request::Subscribe,
96 Request::Stop { force: true },
97 ] {
98 let bytes = rkyv::to_bytes::<rancor::Error>(&req).unwrap();
99 let _back = rkyv::from_bytes::<Request, rancor::Error>(&bytes).unwrap();
100 }
101 }
102}