qemu_command_builder/
cpu.rs1use std::ops::Add;
2
3use bon::Builder;
4
5use crate::ToCommand;
6use crate::cpu_flags::CPUFlags;
7use crate::cpu_type::CpuTypeX86_64;
8
9#[derive(Builder)]
10pub struct CpuX86 {
11 cpu_type: CpuTypeX86_64,
12 migratable: Option<bool>,
13 flags: Vec<CPUFlags>,
14}
15
16impl CpuX86 {
17 pub fn new(cpu_type: CpuTypeX86_64) -> Self {
18 CpuX86 {
19 cpu_type,
20 migratable: None,
21 flags: vec![],
22 }
23 }
24
25 pub fn migratable(&mut self, state: bool) -> &mut Self {
26 self.migratable = Some(state);
27 self
28 }
29 pub fn flags(&mut self, flags: Vec<CPUFlags>) -> &mut Self {
30 self.flags = flags;
31 self
32 }
33}
34
35impl ToCommand for CpuX86 {
36 fn to_command(&self) -> Vec<String> {
37 let mut cmd = vec!["-cpu".to_string()];
38 let mut ct = self.cpu_type.to_command().join("");
39
40 if let Some(migratable) = self.migratable
41 && migratable {
42 ct.push_str(",migratable=yes");
43 }
44 let flags: Vec<String> = self
45 .flags
46 .iter()
47 .map(|v| v.to_command())
48 .collect::<Vec<Vec<String>>>()
49 .concat();
50 if !flags.is_empty() {
51 let flags: Vec<String> = flags.iter().map(|flag| "-".to_string().add(flag)).collect();
52 ct.push_str(format!(",{}", flags.join(",")).as_str());
53 }
54
55 cmd.push(ct);
56
57 cmd
58 }
59}