qemu_command_builder/
action.rs

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