qusb2snes_client/
request.rs1use serde::Serialize;
2
3#[derive(Debug, PartialEq, Serialize)]
4#[serde(rename_all = "PascalCase")]
5pub enum Opcode {
6 DeviceList,
7 Attach,
8 AppVersion,
9 Name,
10 Close,
11 Info,
12 Boot,
13 Menu,
14 Reset,
15 Binary,
16 Stream,
17 Fence,
18 GetAddress,
19 PutAddress,
20 PutIPS,
21 GetFile,
22 PutFile,
23 List,
24 Remove,
25 Rename,
26 MakeDir,
27}
28
29impl Default for Opcode {
30 fn default() -> Self { Opcode::DeviceList }
31}
32
33#[derive(Debug, PartialEq, Serialize)]
34#[serde(rename_all = "UPPERCASE")]
35pub enum Space {
36 Snes,
37 Cmd,
38}
39
40impl Default for Space {
41 fn default() -> Self { Space::Snes }
42}
43
44#[derive(Debug, Default, PartialEq, Serialize)]
45#[serde(rename_all = "PascalCase")]
46pub struct Request {
47 opcode: Opcode,
48 space: Space,
49 #[serde(skip_serializing_if = "Option::is_none")]
50 flags: Option<Vec<String>>,
51 #[serde(skip_serializing_if = "Option::is_none")]
52 operands: Option<Vec<String>>,
53}
54
55impl Request {
56 #[must_use]
57 pub fn device_list() -> Self {
58 Request {
59 opcode: Opcode::DeviceList,
60 space: Space::Snes,
61 ..Self::default()
62 }
63 }
64
65 #[must_use]
66 pub fn attach(device: &str) -> Self {
67 Request {
68 opcode: Opcode::Attach,
69 space: Space::Snes,
70 operands: Some(vec![device.into()]),
71 ..Self::default()
72 }
73 }
74
75 #[must_use]
76 pub fn info() -> Self {
77 Request {
78 opcode: Opcode::Info,
79 space: Space::Snes,
80 ..Self::default()
81 }
82 }
83
84 #[must_use]
85 pub fn get_address(offset: usize, length: usize) -> Self {
86 Request {
87 opcode: Opcode::GetAddress,
88 space: Space::Snes,
89 operands: Some(vec![
90 format!("{:X}", offset),
91 format!("{:X}", length),
92 ]),
93 ..Self::default()
94 }
95 }
96}