app

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

commit 73a5ca5b1c1a49feaf43da36bf412a6378e9043e
parent 8dae02bdff46a91b2b329699ae63ea33e55dc2b0
Author: triesap <triesap@radroots.dev>
Date:   Mon, 19 Jan 2026 17:49:43 +0000

app: add datastore key accessors

- add helpers for key, param, and object lookups
- expose typed accessors for bootstrap keys
- re-export datastore key helpers from app crate
- add unit test for accessor defaults

Diffstat:
Mapp/src/config.rs | 74++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mapp/src/lib.rs | 7+++++++
2 files changed, 81 insertions(+), 0 deletions(-)

diff --git a/app/src/config.rs b/app/src/config.rs @@ -113,6 +113,52 @@ pub fn app_key_maps_validate(config: &AppKeyMapConfig) -> AppConfigResult<()> { Ok(()) } +pub fn app_datastore_key(config: &AppKeyMapConfig, key: &'static str) -> AppConfigResult<&'static str> { + config + .key_map + .get(key) + .copied() + .ok_or(AppConfigError::MissingKeyMap(key)) +} + +pub fn app_datastore_obj_key( + config: &AppKeyMapConfig, + key: &'static str, +) -> AppConfigResult<&'static str> { + config + .obj_map + .get(key) + .copied() + .ok_or(AppConfigError::MissingObjMap(key)) +} + +pub fn app_datastore_param_key( + config: &AppKeyMapConfig, + key: &'static str, +) -> AppConfigResult<AppDatastoreKeyParam> { + config + .param_map + .get(key) + .copied() + .ok_or(AppConfigError::MissingParamMap(key)) +} + +pub fn app_datastore_key_nostr_key(config: &AppKeyMapConfig) -> AppConfigResult<&'static str> { + app_datastore_key(config, "nostr_key") +} + +pub fn app_datastore_key_eula_date(config: &AppKeyMapConfig) -> AppConfigResult<&'static str> { + app_datastore_key(config, "eula_date") +} + +pub fn app_datastore_obj_key_cfg_data(config: &AppKeyMapConfig) -> AppConfigResult<&'static str> { + app_datastore_obj_key(config, "cfg_data") +} + +pub fn app_datastore_obj_key_app_data(config: &AppKeyMapConfig) -> AppConfigResult<&'static str> { + app_datastore_obj_key(config, "app_data") +} + #[derive(Debug, Clone, PartialEq, Eq)] pub struct AppKeystoreConfig { pub nostr_store: RadrootsClientIdbConfig, @@ -188,8 +234,13 @@ mod tests { app_config_default, app_config_from_env, app_datastore_param_nostr_profile, + app_datastore_key_eula_date, + app_datastore_key_nostr_key, + app_datastore_obj_key_app_data, + app_datastore_obj_key_cfg_data, app_key_maps_validate, app_keystore_key_maps_default, + app_datastore_param_key, AppConfig, AppConfigError, AppDatastoreConfig, @@ -286,4 +337,27 @@ mod tests { let err = app_key_maps_validate(&missing).expect_err("missing keys"); assert_eq!(err, AppConfigError::MissingKeyMap("eula_date")); } + + #[test] + fn datastore_key_accessors_read_defaults() { + let config = super::app_key_maps_default(); + assert_eq!( + app_datastore_key_nostr_key(&config).expect("nostr key"), + APP_DATASTORE_KEY_NOSTR_KEY + ); + assert_eq!( + app_datastore_key_eula_date(&config).expect("eula key"), + APP_DATASTORE_KEY_EULA_DATE + ); + assert_eq!( + app_datastore_obj_key_cfg_data(&config).expect("cfg key"), + APP_DATASTORE_KEY_OBJ_CFG_DATA + ); + assert_eq!( + app_datastore_obj_key_app_data(&config).expect("app key"), + APP_DATASTORE_KEY_OBJ_APP_DATA + ); + let nostr_param = app_datastore_param_key(&config, "nostr_profile").expect("param"); + assert_eq!(nostr_param("abc"), "nostr:abc:profile"); + } } diff --git a/app/src/lib.rs b/app/src/lib.rs @@ -13,8 +13,15 @@ pub use data::{AppAppData, AppConfigData, AppConfigRole}; pub use config::{ app_config_default, app_config_from_env, + app_datastore_key, + app_datastore_key_eula_date, + app_datastore_key_nostr_key, app_datastore_param_nostr_profile, app_datastore_param_radroots_profile, + app_datastore_param_key, + app_datastore_obj_key, + app_datastore_obj_key_app_data, + app_datastore_obj_key_cfg_data, app_keystore_key_maps_default, app_key_maps_default, app_key_maps_validate,