qemu_command_builder/
memory.rs1use bon::Builder;
2
3use crate::to_command::ToCommand;
4
5#[derive(Debug, Clone, Hash, Ord, PartialOrd, Eq, PartialEq)]
6pub enum MemoryUnit {
7 Bytes(u64),
8 MegaBytes(u64),
9 GigaBytes(u64),
10}
11
12#[derive(Debug, Clone, Hash, Ord, PartialOrd, Eq, PartialEq, Builder)]
27pub struct Memory {
28 mem: MemoryUnit,
29 slots: Option<usize>,
30 maxmem: Option<MemoryUnit>,
31}
32
33impl ToCommand for Memory {
34 fn to_command(&self) -> Vec<String> {
35 let mut cmd = vec![];
36
37 cmd.push("-m".to_string());
38
39 let mut arg = String::new();
40 match &self.mem {
41 MemoryUnit::Bytes(amount) => {
42 arg.push_str(format!("{}", amount).as_str());
43 }
44 MemoryUnit::MegaBytes(amount) => {
45 arg.push_str(format!("{}M", amount).as_str());
46 }
47 MemoryUnit::GigaBytes(amount) => {
48 arg.push_str(format!("{}G", amount).as_str());
49 }
50 }
51 if let Some(slots) = self.slots {
52 arg.push_str(format!(",slots={}", slots).as_str());
53 }
54 if let Some(maxmem) = &self.maxmem {
55 match maxmem {
56 MemoryUnit::Bytes(amount) => {
57 arg.push_str(format!(",maxmem={}", amount).as_str());
58 }
59 MemoryUnit::MegaBytes(amount) => {
60 arg.push_str(format!(",maxmem={}M", amount).as_str());
61 }
62 MemoryUnit::GigaBytes(amount) => {
63 arg.push_str(format!(",maxmem={}G", amount).as_str());
64 }
65 }
66 }
67 cmd.push(arg);
68
69 cmd
70 }
71}