qemu_command_builder/
fw_cfg.rs

1use bon::Builder;
2use std::path::PathBuf;
3
4use crate::to_command::ToCommand;
5
6#[derive(Debug, Clone, Hash, Ord, PartialOrd, Eq, PartialEq)]
7pub enum StringOrPathBuf {
8    String(String),
9    PathBuf(PathBuf),
10}
11
12#[derive(Debug, Clone, Hash, Ord, PartialOrd, Eq, PartialEq, Default, Builder)]
13pub struct FwCfg {
14    name: Option<String>,
15    data: Option<StringOrPathBuf>,
16}
17
18impl ToCommand for FwCfg {
19    fn to_command(&self) -> Vec<String> {
20        let mut cmd = vec![];
21
22        cmd.push("-fw_cfg".to_string());
23
24        let mut args = vec![];
25        if let Some(name) = &self.name {
26            args.push(format!("name={}", name));
27        }
28        if let Some(data) = &self.data {
29            match &data {
30                StringOrPathBuf::String(string) => {
31                    args.push(format!("string={}", string));
32                }
33                StringOrPathBuf::PathBuf(path) => {
34                    args.push(format!("file={}", path.display()));
35                }
36            }
37        }
38        cmd.push(args.join(","));
39        cmd
40    }
41}