qemu_command_builder/
action.rs

1use 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}