qemu_command_builder/
action.rs1use crate::to_command::{ToArg, ToCommand};
2
3#[derive(Debug, Clone, Hash, Ord, PartialOrd, Eq, PartialEq, 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(Debug, Clone, Hash, Ord, PartialOrd, Eq, PartialEq, 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(Debug, Clone, Hash, Ord, PartialOrd, Eq, PartialEq, 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(Debug, Clone, Hash, Ord, PartialOrd, Eq, PartialEq, 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}
79
80#[derive(Debug, Clone, Hash, Ord, PartialOrd, Eq, PartialEq)]
81pub enum Action {
82 Reboot(RebootAction),
83 Shutdown(ShutdownAction),
84 Panic(PanicAction),
85 Watchdog(WatchdogAction),
86}
87
88impl ToCommand for Action {
89 fn to_command(&self) -> Vec<String> {
90 let mut cmd = vec![];
91
92 cmd.push("-action".to_string());
93
94 match self {
95 Action::Reboot(action) => {
96 cmd.push(format!("reboot={}", action.to_arg()));
97 }
98 Action::Shutdown(action) => {
99 cmd.push(format!("shutdown={}", action.to_arg()));
100 }
101 Action::Panic(action) => {
102 cmd.push(format!("panic={}", action.to_arg()));
103 }
104 Action::Watchdog(action) => {
105 cmd.push(format!("watchdog={}", action.to_arg()));
106 }
107 }
108
109 cmd
110 }
111}