rktk/config/storage/
write.rs1use core::fmt::Debug;
2use postcard::experimental::max_size::MaxSize as _;
3use rktk_keymanager::interface::state::config::StateConfig;
4
5use crate::{config::keymap::Layer, drivers::interface::storage::StorageDriver};
6
7use super::{ConfigKey, StorageConfigManager};
8
9#[derive(Debug)]
10pub enum ConfigWriteError<E: Debug> {
11 WriteError(E),
12 EncodeError(postcard::Error),
13}
14
15impl<E: Debug> From<E> for ConfigWriteError<E> {
16 fn from(e: E) -> Self {
17 ConfigWriteError::WriteError(e)
18 }
19}
20
21impl<S: StorageDriver> StorageConfigManager<S> {
22 pub async fn write_version(&self, version: u16) -> Result<(), ConfigWriteError<S::Error>> {
23 let key = u64::from_le_bytes([ConfigKey::Version as u8, 0, 0, 0, 0, 0, 0, 0]);
24
25 self.storage.write::<2>(key, &version.to_le_bytes()).await?;
26 Ok(())
27 }
28
29 pub async fn write_state_config(
30 &self,
31 data: &StateConfig,
32 ) -> Result<(), ConfigWriteError<S::Error>> {
33 let key = u64::from_le_bytes([ConfigKey::StateConfig as u8, 0, 0, 0, 0, 0, 0, 0]);
34
35 let mut buf = [0; StateConfig::POSTCARD_MAX_SIZE];
36 let _slice = postcard::to_slice(data, &mut buf).map_err(ConfigWriteError::EncodeError)?;
37 self.storage
38 .write::<{ StateConfig::POSTCARD_MAX_SIZE }>(key, &buf)
39 .await?;
40 Ok(())
41 }
42
43 pub async fn write_keymap(
44 &self,
45 layer: u8,
46 data: &Layer,
47 ) -> Result<(), ConfigWriteError<S::Error>> {
48 let key = u64::from_le_bytes([ConfigKey::StateKeymap as u8, layer, 0, 0, 0, 0, 0, 0]);
49
50 let mut buf = [0; Layer::POSTCARD_MAX_SIZE];
51 let _slice = postcard::to_slice(data, &mut buf).map_err(ConfigWriteError::EncodeError)?;
52 self.storage
53 .write::<{ Layer::POSTCARD_MAX_SIZE }>(key, &buf)
54 .await?;
55 Ok(())
56 }
57}