app

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

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