app

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

commit d318d2c48fa8daaa078d4b541a088ecb2fddbf50
parent 42f5d5c85648a49230828ae4632866544259a9d3
Author: triesap <triesap@radroots.dev>
Date:   Mon, 19 Jan 2026 17:33:13 +0000

app: add AppConfig validation helper

- add AppConfig::validate wrapper for key map rules
- use config validation in init path
- add unit test for validate behavior
- keep error mapping unchanged

Diffstat:
Mapp/src/config.rs | 12++++++++++++
Mapp/src/init.rs | 4++--
2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/app/src/config.rs b/app/src/config.rs @@ -168,6 +168,10 @@ impl AppConfig { keystore: AppKeystoreConfig::default_config(), } } + + pub fn validate(&self) -> AppConfigResult<()> { + app_key_maps_validate(&self.datastore.key_maps) + } } pub fn app_config_default() -> AppConfig { @@ -224,6 +228,14 @@ mod tests { } #[test] + fn app_config_validate_uses_key_map_rules() { + let config = app_config_default(); + assert!(config.validate().is_ok()); + let empty = AppConfig::empty(); + assert!(empty.validate().is_err()); + } + + #[test] fn keystore_config_defaults_to_nostr_store() { let config = AppKeystoreConfig::default_config(); assert_eq!(config.nostr_store, IDB_CONFIG_KEYSTORE_NOSTR); diff --git a/app/src/init.rs b/app/src/init.rs @@ -14,7 +14,7 @@ use radroots_app_core::idb::{ }; use radroots_app_core::keystore::{RadrootsClientKeystoreError, RadrootsClientWebKeystoreNostr}; -use crate::{app_key_maps_validate, AppConfig, AppConfigError}; +use crate::{AppConfig, AppConfigError}; #[cfg(target_arch = "wasm32")] use leptos::prelude::window; @@ -153,7 +153,7 @@ pub fn app_init_reset() { } pub async fn app_init_backends(config: AppConfig) -> AppInitResult<AppBackends> { - app_key_maps_validate(&config.datastore.key_maps).map_err(AppInitError::Config)?; + config.validate().map_err(AppInitError::Config)?; idb_store_bootstrap(RADROOTS_IDB_DATABASE, None) .await .map_err(AppInitError::Idb)?;