mcumgr_toolkit/
bootloader.rs1#[derive(Debug, Clone, PartialEq, Eq)]
3pub enum BootloaderInfo {
4 MCUboot {
6 mode: i32,
10 no_downgrade: bool,
12 },
13 Unknown {
15 name: String,
17 },
18}
19
20impl serde::Serialize for BootloaderInfo {
21 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
22 where
23 S: serde::Serializer,
24 {
25 use serde::ser::SerializeStruct;
26
27 let struct_name = "BootloaderInfo";
28
29 match self {
30 BootloaderInfo::MCUboot { mode, no_downgrade } => {
31 let mut s = serializer.serialize_struct(struct_name, 3)?;
32 s.serialize_field("name", &BootloaderType::MCUboot.to_string())?;
33 s.serialize_field("mode", mode)?;
34 s.serialize_field("no_downgrade", no_downgrade)?;
35 s.end()
36 }
37
38 BootloaderInfo::Unknown { name } => {
39 let mut s = serializer.serialize_struct(struct_name, 1)?;
40 s.serialize_field("name", name)?;
41 s.end()
42 }
43 }
44 }
45}
46
47#[derive(
49 Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, strum::Display, strum::EnumString,
50)]
51pub enum BootloaderType {
52 MCUboot,
54}
55
56impl BootloaderInfo {
57 pub fn get_bootloader_type(&self) -> Result<BootloaderType, String> {
61 match self {
62 BootloaderInfo::MCUboot { .. } => Ok(BootloaderType::MCUboot),
63 BootloaderInfo::Unknown { name } => Err(name.clone()),
64 }
65 }
66}
67
68#[derive(
72 strum::FromRepr, strum::IntoStaticStr, strum::Display, Debug, Copy, Clone, PartialEq, Eq,
73)]
74#[repr(i32)]
75#[allow(non_camel_case_types)]
76#[allow(missing_docs)]
77pub enum MCUbootMode {
78 MCUBOOT_MODE_SINGLE_SLOT = 0,
79 MCUBOOT_MODE_SWAP_USING_SCRATCH,
80 MCUBOOT_MODE_UPGRADE_ONLY,
81 MCUBOOT_MODE_SWAP_USING_MOVE,
82 MCUBOOT_MODE_DIRECT_XIP,
83 MCUBOOT_MODE_DIRECT_XIP_WITH_REVERT,
84 MCUBOOT_MODE_RAM_LOAD,
85 MCUBOOT_MODE_FIRMWARE_LOADER,
86 MCUBOOT_MODE_SINGLE_SLOT_RAM_LOAD,
87 MCUBOOT_MODE_SWAP_USING_OFFSET,
88}