#[allow(unused)]
#[rustfmt::skip]
macro_rules! generate_config_handlers {
($location:expr, $prefix:ident, $key:expr, $buf_size:expr) => {
paste::paste! {
use $location::[<$prefix Config>];
#[allow(unused)]
#[cfg(feature = "storage")]
pub async fn [<load_ $prefix:lower _config>]<F, C>(
config: &mut [<$prefix Config>],
storage: &mut MapStorage<u16, F, C>,
) -> Result<(), sequential_storage::Error<F::Error>>
where
F: NorFlash,
C: CacheImpl<u16>,
{
let mut buffer = [0u8; $buf_size];
let stored = storage.fetch_item::<Option<[<$prefix Config>]>>(&mut buffer, &$key).await?;
match stored {
Some(Some(loaded_data)) => {
*config = loaded_data;
}
None | Some(None) => {
*config = [<$prefix Config>]::default();
}
}
Ok(())
}
#[allow(unused)]
#[cfg(feature = "storage")]
pub async fn [<save_ $prefix:lower _config>]<F, C>(
config: &[<$prefix Config>],
storage: &mut MapStorage<u16, F, C>
) -> Result<(), sequential_storage::Error<F::Error>>
where
F: NorFlash,
C: CacheImpl<u16>,
[<$prefix Config>]: PartialEq {
let mut buffer = [0u8; $buf_size];
let stored = storage.fetch_item::<Option<[<$prefix Config>]>>(&mut buffer, &$key).await?;
if *config == [<$prefix Config>]::default() {
if matches!(stored, Some(Some(_))) {
let delete_marker: Option<ArmingConfig> = None;
storage.store_item(&mut buffer, &$key, &delete_marker).await?;
}
} else {
if !matches!(stored, Some(Some(stored_config)) if stored_config == *config) {
storage.store_item(&mut buffer, &$key, &Some(*config)).await?;
}
}
Ok(())
}
#[allow(unused)]
#[cfg(feature = "storage")]
pub async fn [<delete_ $prefix:lower _config>]<F, C>(
storage: &mut MapStorage<u16, F, C>
) -> Result<(), sequential_storage::Error<F::Error>>
where
F: NorFlash,
C: CacheImpl<u16>
{
let mut buffer = [0u8; $buf_size];
let stored =storage.fetch_item::<Option<[<$prefix Config>]>>(&mut buffer, &$key).await?;
if matches!(stored, Some(Some(_))) {
let delete_marker: Option<[<$prefix Config>]> = None;
storage.store_item(&mut buffer, &$key, &delete_marker).await?;
}
Ok(())
}
}};}