diff --git a/Cargo.lock b/Cargo.lock index 99ff196..296fb56 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -210,6 +210,7 @@ dependencies = [ "esp-radio", "esp-rtos", "esp-storage", + "int-enum", "picoserve", "portable-atomic", "postcard", @@ -1431,6 +1432,18 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "int-enum" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e366a1634cccc76b4cfd3e7580de9b605e4d93f1edac48d786c1f867c0def495" +dependencies = [ + "proc-macro2", + "proc-macro2-diagnostics", + "quote", + "syn 2.0.117", +] + [[package]] name = "itoa" version = "1.0.18" @@ -1720,6 +1733,18 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "proc-macro2-diagnostics" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", + "version_check", +] + [[package]] name = "quote" version = "1.0.45" diff --git a/Cargo.toml b/Cargo.toml index 95d6068..958a1c3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -66,6 +66,7 @@ sequential-storage = "8.0" esp-storage = { version = "0.9", features = ["defmt", "esp32c6"] } postcard = { version = "1.1", default-features = false } serde = { version = "1.0", default-features = false, features = ["derive"] } +int-enum = "1.2.0" # For fine tuning these settings, please refer to https://doc.rust-lang.org/cargo/reference/profiles.html diff --git a/src/config.rs b/src/config.rs index baa2ca0..0fffdd5 100644 --- a/src/config.rs +++ b/src/config.rs @@ -4,6 +4,7 @@ use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex; use embedded_rpc::RpcService; use esp_hal::peripherals::FLASH; use esp_storage::FlashStorage; +use int_enum::IntEnum; use sequential_storage::{ cache::Cache, map::{Key, MapConfig, MapStorage, SerializationError}, @@ -52,30 +53,12 @@ async fn config_handler(flash: FLASH<'static>) { } } -#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, IntEnum)] #[repr(u8)] enum ConfigKey { Wifi, } -impl TryFrom for ConfigKey { - type Error = (); - - fn try_from(value: u8) -> Result { - const WIFI: u8 = ConfigKey::Wifi as u8; - match value { - WIFI => Ok(ConfigKey::Wifi), - _ => Err(()), - } - } -} - -impl From for u8 { - fn from(c: ConfigKey) -> u8 { - c as u8 - } -} - impl Key for ConfigKey { fn get_len(_: &[u8]) -> Result { Ok(1)