commit 4b1bb014479a6295be06ac23a43dbaf5d9b328b8
parent e64992bcc8069318468738879308bdf0dc76d183
Author: triesap <triesap@radroots.dev>
Date: Mon, 19 Jan 2026 17:56:11 +0000
app: add datastore writer for app data
- add bootstrap helper to write app data
- use key map accessor for app data key
- map datastore errors into AppInitError
- add unit test for non-wasm error mapping
Diffstat:
2 files changed, 31 insertions(+), 3 deletions(-)
diff --git a/app/src/bootstrap.rs b/app/src/bootstrap.rs
@@ -4,6 +4,8 @@ use radroots_app_core::datastore::RadrootsClientDatastore;
use crate::{
app_datastore_obj_key_cfg_data,
+ app_datastore_obj_key_app_data,
+ AppAppData,
AppConfigData,
AppInitError,
AppInitResult,
@@ -22,10 +24,22 @@ pub async fn app_datastore_write_config<T: RadrootsClientDatastore>(
.map_err(AppInitError::Datastore)
}
+pub async fn app_datastore_write_app_data<T: RadrootsClientDatastore>(
+ datastore: &T,
+ key_maps: &AppKeyMapConfig,
+ data: &AppAppData,
+) -> AppInitResult<AppAppData> {
+ let key = app_datastore_obj_key_app_data(key_maps).map_err(AppInitError::Config)?;
+ datastore
+ .set_obj(key, data)
+ .await
+ .map_err(AppInitError::Datastore)
+}
+
#[cfg(test)]
mod tests {
- use super::app_datastore_write_config;
- use crate::{app_key_maps_default, AppConfigData, AppInitError};
+ use super::{app_datastore_write_app_data, app_datastore_write_config};
+ use crate::{app_key_maps_default, AppAppData, AppConfigData, AppInitError};
use radroots_app_core::datastore::{RadrootsClientDatastoreError, RadrootsClientWebDatastore};
#[test]
@@ -41,4 +55,18 @@ mod tests {
.expect_err("idb undefined");
assert_eq!(err, AppInitError::Datastore(RadrootsClientDatastoreError::IdbUndefined));
}
+
+ #[test]
+ fn app_data_write_maps_idb_errors() {
+ let datastore = RadrootsClientWebDatastore::new(None);
+ let key_maps = app_key_maps_default();
+ let data = AppAppData::default();
+ let err = futures::executor::block_on(app_datastore_write_app_data(
+ &datastore,
+ &key_maps,
+ &data,
+ ))
+ .expect_err("idb undefined");
+ assert_eq!(err, AppInitError::Datastore(RadrootsClientDatastoreError::IdbUndefined));
+ }
}
diff --git a/app/src/lib.rs b/app/src/lib.rs
@@ -9,7 +9,7 @@ mod init;
mod entry;
pub use app::App;
-pub use bootstrap::app_datastore_write_config;
+pub use bootstrap::{app_datastore_write_app_data, app_datastore_write_config};
pub use context::{app_context, AppContext};
pub use data::{AppAppData, AppConfigData, AppConfigRole};
pub use config::{