qemu_command_builder/
acpitable.rs1use std::path::PathBuf;
2
3use bon::Builder;
4
5use crate::to_command::ToCommand;
6
7#[derive(Debug, Clone, Hash, Ord, PartialOrd, Eq, PartialEq)]
8pub enum DataFile {
9 File(Vec<PathBuf>),
10 Data(Vec<PathBuf>),
11}
12
13#[derive(Debug, Clone, Hash, Ord, PartialOrd, Eq, PartialEq, Default, Builder)]
23pub struct AcpiTable {
24 sig: Option<String>,
25 rev: Option<usize>,
26 oem_id: Option<String>,
27 oem_table_id: Option<String>,
28 oem_rev: Option<usize>,
29 asl_compiler_id: Option<String>,
30 asl_compiler_rev: Option<usize>,
31 data: Option<DataFile>,
32}
33
34impl ToCommand for AcpiTable {
35 fn to_command(&self) -> Vec<String> {
36 let mut cmd = vec![];
37
38 cmd.push("-acpitable".to_string());
39
40 let mut args = vec![];
41 if let Some(sig) = &self.sig {
42 args.push(format!("sig={}", sig));
43 }
44 if let Some(rev) = self.rev {
45 args.push(format!("rev={}", rev));
46 }
47 if let Some(oem_id) = &self.oem_id {
48 args.push(format!("oem_id={}", oem_id));
49 }
50 if let Some(oem_table_id) = &self.oem_table_id {
51 args.push(format!("oem_table_id={}", oem_table_id));
52 }
53 if let Some(oem_rev) = self.oem_rev {
54 args.push(format!("oem_rev={}", oem_rev));
55 }
56 if let Some(asl_compiler_id) = &self.asl_compiler_id {
57 args.push(format!("asl_compiler_id={}", asl_compiler_id));
58 }
59 if let Some(asl_compiler_rev) = self.asl_compiler_rev {
60 args.push(format!("asl_compiler_rev={}", asl_compiler_rev));
61 }
62 if let Some(data) = &self.data {
63 match data {
64 DataFile::File(data) => {
65 let files: Vec<String> = data.iter().map(|p| p.display().to_string()).collect();
66 args.push(format!("file={}", files.join(":")));
67 }
68 DataFile::Data(data) => {
69 let files: Vec<String> = data.iter().map(|p| p.display().to_string()).collect();
70 args.push(format!("file={}", files.join(":")));
71 }
72 }
73 }
74
75 cmd.push(args.join(","));
76 cmd
77 }
78}