Skip to main content

steamroom_cli/daemon/proto/
request.rs

1use 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}