commit e64992bcc8069318468738879308bdf0dc76d183
parent 73a5ca5b1c1a49feaf43da36bf412a6378e9043e
Author: triesap <triesap@radroots.dev>
Date: Mon, 19 Jan 2026 17:53:09 +0000
app: add datastore writer for config data
- add bootstrap helper to write config data
- use key map accessor for config data key
- map datastore errors into AppInitError
- add unit test for non-wasm error mapping
Diffstat:
2 files changed, 46 insertions(+), 0 deletions(-)
diff --git a/app/src/bootstrap.rs b/app/src/bootstrap.rs
@@ -0,0 +1,44 @@
+#![forbid(unsafe_code)]
+
+use radroots_app_core::datastore::RadrootsClientDatastore;
+
+use crate::{
+ app_datastore_obj_key_cfg_data,
+ AppConfigData,
+ AppInitError,
+ AppInitResult,
+ AppKeyMapConfig,
+};
+
+pub async fn app_datastore_write_config<T: RadrootsClientDatastore>(
+ datastore: &T,
+ key_maps: &AppKeyMapConfig,
+ data: &AppConfigData,
+) -> AppInitResult<AppConfigData> {
+ let key = app_datastore_obj_key_cfg_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 radroots_app_core::datastore::{RadrootsClientDatastoreError, RadrootsClientWebDatastore};
+
+ #[test]
+ fn config_write_maps_idb_errors() {
+ let datastore = RadrootsClientWebDatastore::new(None);
+ let key_maps = app_key_maps_default();
+ let data = AppConfigData::default();
+ let err = futures::executor::block_on(app_datastore_write_config(
+ &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
@@ -1,6 +1,7 @@
#![forbid(unsafe_code)]
mod app;
+mod bootstrap;
mod context;
mod config;
mod data;
@@ -8,6 +9,7 @@ mod init;
mod entry;
pub use app::App;
+pub use bootstrap::app_datastore_write_config;
pub use context::{app_context, AppContext};
pub use data::{AppAppData, AppConfigData, AppConfigRole};
pub use config::{