app

Local-first trade for farms and co-ops
git clone https://radroots.dev/git/app.git
Log | Files | Refs | README | LICENSE

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:
Mapp/src/bootstrap.rs | 32++++++++++++++++++++++++++++++--
Mapp/src/lib.rs | 2+-
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::{