qemu_command_builder/
runwith.rs1use 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}