Skip to main content

hdc_rs/
device.rs

1/// Target boot mode accepted by `target boot`.
2#[derive(Debug, Clone, PartialEq, Eq)]
3pub enum TargetBootMode {
4    /// Boot to bootloader mode.
5    Bootloader,
6    /// Boot to recovery mode.
7    Recovery,
8    /// Pass a custom upstream boot mode argument through unchanged.
9    Other(String),
10}
11
12impl TargetBootMode {
13    /// Render this mode as an upstream `target boot` argument.
14    pub fn as_arg(&self) -> &str {
15        match self {
16            Self::Bootloader => "-bootloader",
17            Self::Recovery => "-recovery",
18            Self::Other(value) => value.as_str(),
19        }
20    }
21}
22
23impl From<&str> for TargetBootMode {
24    fn from(value: &str) -> Self {
25        match value {
26            "-bootloader" | "bootloader" => Self::Bootloader,
27            "-recovery" | "recovery" => Self::Recovery,
28            other => Self::Other(other.to_string()),
29        }
30    }
31}
32
33/// Target transport mode accepted by `tmode`.
34#[derive(Debug, Clone, PartialEq, Eq)]
35pub enum TargetMode {
36    /// Switch target to USB mode.
37    Usb,
38    /// Switch target to TCP port mode. `None` renders `tmode port`.
39    Port(Option<u16>),
40    /// Close TCP port mode.
41    PortClose,
42}
43
44#[cfg(test)]
45mod tests {
46    use super::*;
47
48    #[test]
49    fn target_boot_modes_render_upstream_args() {
50        assert_eq!(TargetBootMode::Bootloader.as_arg(), "-bootloader");
51        assert_eq!(TargetBootMode::Recovery.as_arg(), "-recovery");
52        assert_eq!(
53            TargetBootMode::Other("flashd".to_string()).as_arg(),
54            "flashd"
55        );
56    }
57}