qemu_command_builder/
action.rs1use crate::to_command::{ToArg, ToCommand};
2
3#[derive(Default)]
4pub enum RebootAction {
5 #[default]
6 Reset,
7 Shutdown,
8}
9
10impl ToArg for RebootAction {
11 fn to_arg(&self) -> &str {
12 match self {
13 RebootAction::Reset => "reset",
14 RebootAction::Shutdown => "shutdown",
15 }
16 }
17}
18
19#[derive(Default)]
20pub enum ShutdownAction {
21 #[default]
22 PowerOff,
23 Pause,
24}
25
26impl ToArg for ShutdownAction {
27 fn to_arg(&self) -> &str {
28 match self {
29 ShutdownAction::PowerOff => "poweroff",
30 ShutdownAction::Pause => "pause",
31 }
32 }
33}
34
35#[derive(Default)]
36pub enum PanicAction {
37 Pause,
38 #[default]
39 Shutdown,
40 ExitFailure,
41 None,
42}
43
44impl ToArg for PanicAction {
45 fn to_arg(&self) -> &str {
46 match self {
47 PanicAction::Pause => "pause",
48 PanicAction::Shutdown => "shutdown",
49 PanicAction::ExitFailure => "exit-failure",
50 PanicAction::None => "none",
51 }
52 }
53}
54
55#[derive(Default)]
56pub enum WatchdogAction {
57 #[default]
58 Reset,
59 Shutdown,
60 PowerOff,
61 InjectNmi,
62 Pause,
63 Debug,
64 None,
65}
66impl ToArg for WatchdogAction {
67 fn to_arg(&self) -> &str {
68 match self {
69 WatchdogAction::Reset => "reset",
70 WatchdogAction::Shutdown => "shutdown",
71 WatchdogAction::PowerOff => "poweroff",
72 WatchdogAction::InjectNmi => "inject-nmi",
73 WatchdogAction::Pause => "pause",
74 WatchdogAction::Debug => "debug",
75 WatchdogAction::None => "none",
76 }
77 }
78}
79pub enum Action {
80 Reboot(RebootAction),
81 Shutdown(ShutdownAction),
82 Panic(PanicAction),
83 Watchdog(WatchdogAction),
84}
85
86impl ToCommand for Action {
87 fn to_command(&self) -> Vec<String> {
88 let mut cmd = vec![];
89
90 cmd.push("-action".to_string());
91
92 match self {
93 Action::Reboot(action) => {
94 cmd.push(format!("reboot={}", action.to_arg()));
95 }
96 Action::Shutdown(action) => {
97 cmd.push(format!("shutdown={}", action.to_arg()));
98 }
99 Action::Panic(action) => {
100 cmd.push(format!("panic={}", action.to_arg()));
101 }
102 Action::Watchdog(action) => {
103 cmd.push(format!("watchdog={}", action.to_arg()));
104 }
105 }
106
107 cmd
108 }
109}