qemu_command_builder/
runwith.rs

1use crate::common::OnOff;
2use crate::to_command::{ToArg, ToCommand};
3use bon::Builder;
4use std::path::PathBuf;
5
6pub enum UserOrIds {
7    User(String),
8    Id { uid: usize, gid: usize },
9}
10#[derive(Default, Builder)]
11pub struct RunWith {
12    async_teardown: Option<OnOff>,
13    chroot: Option<PathBuf>,
14    user: Option<UserOrIds>,
15}
16
17impl ToCommand for RunWith {
18    fn to_command(&self) -> Vec<String> {
19        let mut cmd = vec![];
20
21        cmd.push("-run-with".to_string());
22
23        let mut args = vec![];
24
25        if let Some(async_teardown) = &self.async_teardown {
26            args.push(format!("async-teardown={}", async_teardown.to_arg()))
27        }
28        if let Some(chroot) = &self.chroot {
29            args.push(format!("chroot={}", chroot.display()));
30        }
31        if let Some(user) = &self.user {
32            match user {
33                UserOrIds::User(id) => {
34                    args.push(format!("user={}", id));
35                }
36                UserOrIds::Id { uid, gid } => {
37                    args.push(format!("user={}:{}", uid, gid));
38                }
39            }
40        }
41        cmd.push(args.join(","));
42        cmd
43    }
44}