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:
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,